default	rel
%define XMMWORD
%define YMMWORD
%define ZMMWORD

section	.text code align=64


global	curve25519_donna_x64

# donna function.
# linux arguments: RDI, RSI, RDX
# windows arguments: RCX, RDX, R8
curve25519_donna_x64:
$L$FB13:
	push	r15
	push	r14
	xor	r15d,r15d
	push	r13
	push	r12
	push	rbp
	push	rbx
	push  rsi
	push  rdi

	mov rdi, rcx
	mov rsi, rdx
	mov rdx, r8

	xor	r8d,r8d
	xor	r11d,r11d
	xor	ebp,ebp
	xor	r9d,r9d
	xor	r13d,r13d
	sub	rsp,784

	mov	rcx,QWORD[6+rdx]
	mov	r10,QWORD[rdx]
	movdqu	xmm0,XMMWORD[rsi]
	lea	r14,[488+rsp]
	mov	QWORD[352+rsp],rdi
	movaps	XMMWORD[360+rsp],xmm0
	shr	rcx,3
	and	BYTE[360+rsp],-8
	mov	rbx,rcx
	mov	rcx,QWORD[12+rdx]
	movdqu	xmm0,XMMWORD[16+rsi]
	shr	rcx,6
	movaps	XMMWORD[376+rsp],xmm0
	movzx	eax,BYTE[391+rsp]
	and	eax,127
	or	eax,64
	mov	BYTE[391+rsp],al
	mov		rax,2251799813685247
	and	rcx,rax
	and	rbx,rax
	and	r10,rax
	mov	rdi,rcx
	mov	QWORD[184+rsp],rcx
	mov	rcx,QWORD[19+rdx]
	mov	rdx,QWORD[24+rdx]
	mov	QWORD[24+rsp],r10
	mov	QWORD[120+rsp],rbx
	shr	rcx,1
	shr	rdx,12
	and	rcx,rax
	mov	rsi,rdx
	mov	r12,rcx
	mov	QWORD[264+rsp],rcx
	and	rsi,rax
	lea	rdx,[rsi*8+rsi]
	mov	QWORD[320+rsp],rsi
	mov	QWORD[((-120))+rsp],rsi
	lea	rdx,[rdx*2+rsi]
	mov	rsi,r14
	mov	r14,r15
	mov	QWORD[192+rsp],rdx
	lea	rdx,[rbx*8+rbx]
	lea	rdx,[rdx*2+rbx]
	mov	QWORD[328+rsp],rdx
	lea	rdx,[rdi*8+rdi]
	lea	rdx,[rdx*2+rdi]
	mov	QWORD[336+rsp],rdx
	lea	rdx,[rcx*8+rcx]
	lea	rdx,[rdx*2+rcx]
	lea	rcx,[728+rsp]
	mov	QWORD[200+rsp],rdx
	lea	rdx,[391+rsp]
	mov	QWORD[344+rsp],rdx
	mov	QWORD[((-24))+rsp],rdi
	lea	rdx,[536+rsp]
	mov	QWORD[88+rsp],rcx
	lea	rcx,[680+rsp]
	mov	QWORD[40+rsp],rbx
	mov	QWORD[((-88))+rsp],r10
	mov	ebx,1
	xor	r10d,r10d
	mov	QWORD[232+rsp],rcx
	lea	rcx,[632+rsp]
	mov	QWORD[((-104))+rsp],rbx
	mov	r15,QWORD[40+rsp]
	xor	edi,edi
	mov	QWORD[40+rsp],r12
	mov	QWORD[80+rsp],rcx
	lea	rcx,[584+rsp]
	mov	QWORD[((-32))+rsp],0
	mov	QWORD[((-56))+rsp],0
	mov	QWORD[72+rsp],1
	mov	rbx,r8
	mov	QWORD[104+rsp],rcx
	lea	rcx,[440+rsp]
	mov	QWORD[8+rsp],rdx
	mov	QWORD[56+rsp],r10
	mov	r12,r11
	mov	QWORD[((-8))+rsp],rcx
	lea	rcx,[392+rsp]
	mov	QWORD[((-72))+rsp],rcx
	mov	rcx,rax
	mov	rax,QWORD[344+rsp]


$L$3:
	movzx	eax,BYTE[rax]
	mov	rdx,QWORD[((-8))+rsp]
	mov	QWORD[240+rsp],rsi
	mov	DWORD[316+rsp],8
	mov	rsi,r15
	mov	r15,QWORD[72+rsp]
	mov	BYTE[315+rsp],al
	mov	rax,QWORD[80+rsp]
	mov	QWORD[80+rsp],rdx
	mov	rdx,r9
	mov	QWORD[((-8))+rsp],rax
	mov	rax,QWORD[8+rsp]
	mov	QWORD[256+rsp],rax
	mov	rax,QWORD[((-72))+rsp]
	mov	QWORD[((-72))+rsp],rbp
	mov	QWORD[248+rsp],rax
	mov	rax,r8
	jmp	NEAR $L$2


$L$10:
	mov	r9,r8
	mov	r8,QWORD[80+rsp]
	mov	QWORD[80+rsp],r9
	mov	r9,QWORD[88+rsp]
	mov	QWORD[((-8))+rsp],r8
	mov	r8,QWORD[256+rsp]
	mov	QWORD[256+rsp],r9
	mov	r9,QWORD[104+rsp]
	mov	QWORD[88+rsp],r8
	mov	r8,QWORD[248+rsp]
	mov	QWORD[248+rsp],r9
	mov	r9,QWORD[232+rsp]
	mov	QWORD[104+rsp],r8
	mov	r8,QWORD[240+rsp]
	mov	QWORD[240+rsp],r9
	mov	QWORD[232+rsp],r8
$L$2:
	movzx	r8d,BYTE[315+rsp]
	mov	QWORD[208+rsp],rcx
	mov	rcx,QWORD[((-88))+rsp]
	shr	r8b,7
	mov	r9,rcx
	movzx	r8d,r8b
	xor	r9,r15
	neg	r8
	and	r9,r8
	mov	rbp,r8
	xor	r15,r9
	xor	r9,rcx
	mov	rcx,rbp
	mov	QWORD[((-88))+rsp],r15
	mov	r15,QWORD[((-56))+rsp]
	mov	QWORD[160+rsp],r9
	mov	QWORD[128+rsp],rcx
	mov	r9,r15
	xor	r9,rsi
	mov	r8,r9
	and	r8,rbp
	xor	r15,r8
	mov	r9,r15
	mov	r15,r8
	xor	r15,rsi
	mov	QWORD[72+rsp],r15
	mov	r15,QWORD[((-24))+rsp]
	mov	rsi,r15
	xor	rsi,r10
	and	rsi,rbp
	mov	rbp,QWORD[((-72))+rsp]
	xor	r10,rsi
	xor	rsi,r15
	mov	r15,QWORD[40+rsp]
	mov	QWORD[8+rsp],rsi
	mov	rsi,r15
	xor	rsi,rbp
	and	rsi,rcx
	xor	rbp,rsi
	xor	rsi,r15
	mov	r15,QWORD[((-32))+rsp]
	mov	QWORD[40+rsp],rsi
	mov	rsi,QWORD[((-120))+rsp]
	xor	rsi,r15
	mov	r8,rsi
	and	r8,rcx
	xor	r15,r8
	mov	rsi,r15
	mov	r15,QWORD[((-120))+rsp]
	xor	r15,r8
	mov	r8,QWORD[((-104))+rsp]
	mov	QWORD[152+rsp],r15
	mov	r15,QWORD[((-104))+rsp]
	xor	r8,r12
	and	r8,rcx
	xor	r15,r8
	xor	r12,r8
	mov	r8,r11
	mov	QWORD[((-32))+rsp],r15
	mov	r15,QWORD[56+rsp]
	xor	r8,rdx
	and	r8,rcx
	xor	r11,r8
	xor	r8,rdx
	mov	rdx,r15
	mov	QWORD[((-72))+rsp],r8
	mov	r8,r14
	xor	rdx,rdi
	and	rdx,rcx
	xor	rdi,rdx
	xor	r8,r13
	xor	rdx,r15
	and	r8,rcx
	mov	r15,QWORD[((-88))+rsp]
	xor	r14,r8
	xor	r13,r8
	mov	r8,rbx
	xor	r8,rax
	and	r8,rcx
	mov		rcx,18014398509481832
	xor	rbx,r8
	xor	r8,rax
	lea	rax,[r15*1+r12]
	mov	r15,QWORD[240+rsp]
	mov	QWORD[((-56))+rsp],rax
	mov	QWORD[r15],rax
	lea	rax,[r9*1+r11]
	mov	QWORD[8+r15],rax
	mov	QWORD[((-120))+rsp],rax
	lea	rax,[r10*1+rdi]
	mov	QWORD[16+r15],rax
	mov	QWORD[136+rsp],rax
	lea	rax,[rbp*1+r14]
	mov	QWORD[24+r15],rax
	mov	QWORD[144+rsp],rax
	lea	rax,[rsi*1+rbx]
	mov	QWORD[((-104))+rsp],rax
	mov	QWORD[32+r15],rax
	mov	r15,QWORD[((-88))+rsp]
	mov	rax,QWORD[256+rsp]
	add	r15,rcx
	sub	r15,r12
	mov		r12,18014398509481976
	mov	QWORD[rax],r15
	mov	QWORD[((-24))+rsp],r15
	mov	r15,r12
	add	r9,r12
	add	r10,r15
	add	rbp,r15
	sub	r10,rdi
	mov	r12,r9
	mov	rdi,r15
	mov	r15,rbp
	sub	r12,r11
	mov	r11,rax
	sub	r15,r14
	mov	QWORD[8+rax],r12
	mov	QWORD[16+r11],r10
	mov	QWORD[24+r11],r15
	mov	r11,rdi
	mov	r14,r15
	add	r11,rsi
	mov	r15,QWORD[((-32))+rsp]
	mov	QWORD[((-88))+rsp],r10
	sub	r11,rbx
	mov	r10,QWORD[((-72))+rsp]
	mov	rbx,QWORD[8+rsp]
	add	r10,QWORD[72+rsp]
	mov	QWORD[32+rax],r11
	mov	rsi,QWORD[40+rsp]
	mov	rax,QWORD[160+rsp]
	mov	rdi,r15
	mov	r9,QWORD[152+rsp]
	mov	rbp,QWORD[248+rsp]
	add	rbx,rdx
	add	rdi,rax
	add	rsi,r13
	add	rcx,rax
	add	r9,r8
	mov	QWORD[rbp],rdi
	mov	QWORD[8+rbp],r10
	mov	QWORD[16+rbp],rbx
	mov	QWORD[24+rbp],rsi
	mov	QWORD[32+rbp],r9
	mov	rbp,rcx
	mov		rcx,18014398509481976
	add	rcx,QWORD[72+rsp]
	sub	rbp,r15
	mov	rax,QWORD[80+rsp]
	mov	QWORD[((-32))+rsp],rbp
	mov	QWORD[rax],rbp
	mov	r15,rcx
	mov		rcx,18014398509481976
	add	rcx,QWORD[8+rsp]
	sub	r15,QWORD[((-72))+rsp]
	mov	rbp,rcx
	mov		rcx,18014398509481976
	sub	rbp,rdx
	mov	QWORD[8+rax],r15
	lea	rax,[r11*8+r11]
	mov	rdx,rbp
	mov	rbp,QWORD[80+rsp]
	mov	QWORD[72+rsp],rdx
	mov	QWORD[16+rbp],rdx
	add	rcx,QWORD[40+rsp]
	mov	QWORD[((-72))+rsp],r14
	mov	rdx,rcx
	mov		rcx,18014398509481976
	sub	rdx,r13
	add	rcx,QWORD[152+rsp]
	mov	QWORD[152+rsp],r11
	mov	r13,rdx
	mov	rdx,rbp
	mov	QWORD[24+rbp],r13
	mov	QWORD[56+rsp],r13
	mov	rbp,rcx
	sub	rbp,r8
	lea	r8,[rax*2+r11]
	mov	QWORD[32+rdx],rbp
	mov	QWORD[160+rsp],rbp
	mov	rbp,QWORD[((-88))+rsp]
	mov	r13,r8
	mov	r8,r12
	mov	QWORD[8+rsp],r13
	lea	rax,[rbp*8+rbp]
	lea	rdx,[rax*2+rbp]
	lea	rax,[r14*8+r14]
	lea	r14,[rax*2+r14]
	lea	rax,[r12*8+r12]
	mov	rcx,rdx
	mov	QWORD[224+rsp],rcx
	lea	r11,[rax*2+r12]
	mov	QWORD[168+rsp],r14
	mov	rax,r11
	mul	r9
	mov	r11,rax
	mov	rax,r13
	mov	r12,rdx
	mul	r10
	mov	r13,QWORD[((-24))+rsp]
	add	r11,rax
	mov	rax,r13
	adc	r12,rdx
	mul	rdi
	add	r11,rax
	mov	rax,r14
	adc	r12,rdx
	mul	rbx
	add	r11,rax
	mov	rax,rcx
	mov	rcx,QWORD[208+rsp]
	adc	r12,rdx
	mul	rsi
	add	r11,rax
	mov	rax,r13
	adc	r12,rdx
	mov	rdx,r11
	and	rdx,rcx
	mov	QWORD[208+rsp],rdx
	mul	r10
	mov	r13,rax
	mov	rax,r8
	mov	r14,rdx
	mul	rdi
	add	r13,rax
	mov	rax,QWORD[8+rsp]
	adc	r14,rdx
	mul	rbx
	add	r13,rax
	mov	rax,QWORD[224+rsp]
	adc	r14,rdx
	mul	r9
	add	r13,rax
	mov	rax,QWORD[168+rsp]
	adc	r14,rdx
	mul	rsi
	add	rax,r13
	mov	r13,r12
	mov	r12,r11
	adc	rdx,r14
	shrd	r12,r13,51
	shr	r13,51
	mov	r14,r13
	mov	r13,r12
	add	r13,rax
	mov	rax,QWORD[((-24))+rsp]
	adc	r14,rdx
	mov	r12,r13
	and	r12,rcx
	mul	rbx
	mov	QWORD[216+rsp],r12
	mov	r11,rax
	mov	rax,rbp
	mov	r12,rdx
	mul	rdi
	mov	rbp,r8
	mov	QWORD[40+rsp],rbp
	add	r11,rax
	mov	rax,r8
	adc	r12,rdx
	mul	r10
	add	r11,rax
	mov	rax,QWORD[8+rsp]
	adc	r12,rdx
	mul	rsi
	add	r11,rax
	mov	rax,QWORD[168+rsp]
	adc	r12,rdx
	mul	r9
	add	rax,r11
	adc	rdx,r12
	mov	r12,r13
	mov	r13,r14
	shrd	r12,r14,51
	shr	r13,51
	mov	r11,r12
	mov	r12,r13
	add	r11,rax
	mov	rax,QWORD[((-24))+rsp]
	adc	r12,rdx
	mov	r8,r11
	and	r8,rcx
	mul	rsi
	mov	r13,rax
	mov	rax,QWORD[((-72))+rsp]
	mov	r14,rdx
	mul	rdi
	add	r13,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	r14,rdx
	mul	r10
	add	r13,rax
	mov	rax,rbp
	adc	r14,rdx
	mul	rbx
	add	r13,rax
	mov	rax,QWORD[8+rsp]
	adc	r14,rdx
	mul	r9
	add	rax,r13
	mov	r13,r12
	mov	r12,r11
	adc	rdx,r14
	shrd	r12,r13,51
	shr	r13,51
	mov	r14,r13
	mov	r13,r12
	add	r13,rax
	mov	rax,r9
	adc	r14,rdx
	mov	r12,r13
	mov	r9,r13
	mul	QWORD[((-24))+rsp]
	and	r12,rcx
	mov	QWORD[272+rsp],r12
	mov	r11,rax
	mov	r12,rdx
	mov	rax,rdi
	mul	QWORD[152+rsp]
	mov	rdi,rax
	mov	rbp,rdx
	mov	rax,rsi
	add	rdi,r11
	adc	rbp,r12
	mul	QWORD[40+rsp]
	add	rdi,rax
	mov	rax,r10
	mov	r10,r14
	adc	rbp,rdx
	mul	QWORD[((-72))+rsp]
	add	rdi,rax
	mov	rax,rbx
	adc	rbp,rdx
	mul	QWORD[((-88))+rsp]
	mov	r13,QWORD[56+rsp]
	mov	rbx,QWORD[136+rsp]
	add	rdi,rax
	adc	rbp,rdx
	shr	r10,51
	shrd	r9,r14,51
	mov	rdx,r10
	mov	r10,QWORD[((-104))+rsp]
	mov	r14,QWORD[((-32))+rsp]
	mov	rax,r9
	add	rax,rdi
	mov	rdi,rax
	adc	rdx,rbp
	mov	rbp,QWORD[144+rsp]
	and	rdi,rcx
	mov	QWORD[280+rsp],rdi
	mov	rdi,rax
	shrd	rdi,rdx,51
	mov	rdx,QWORD[72+rsp]
	lea	rax,[rdi*8+rdi]
	lea	rax,[rax*2+rdi]
	add	rax,QWORD[208+rsp]
	mov	r9,rax
	shr	rax,51
	add	rax,QWORD[216+rsp]
	and	r9,rcx
	mov	QWORD[288+rsp],r9
	mov	r9,QWORD[((-120))+rsp]
	mov	rdi,rax
	shr	rax,51
	lea	rsi,[r8*1+rax]
	mov	r8,QWORD[160+rsp]
	and	rdi,rcx
	mov	QWORD[208+rsp],rdi
	mov	QWORD[216+rsp],rsi
	lea	rax,[r8*8+r8]
	lea	rsi,[rax*2+r8]
	lea	rax,[rdx*8+rdx]
	lea	r8,[rax*2+rdx]
	lea	rax,[r13*8+r13]
	lea	rdi,[rax*2+r13]
	lea	rax,[r15*8+r15]
	lea	r11,[rax*2+r15]
	mov	rax,r11
	mul	r10
	mov	r11,rax
	mov	rax,r9
	mov	r12,rdx
	mul	rsi
	add	r11,rax
	mov	rax,r14
	adc	r12,rdx
	mul	QWORD[((-56))+rsp]
	add	r11,rax
	mov	rax,rbx
	adc	r12,rdx
	mul	rdi
	add	r11,rax
	mov	rax,rbp
	adc	r12,rdx
	mul	r8
	add	r11,rax
	mov	rax,r11
	adc	r12,rdx
	and	rax,rcx
	mov	QWORD[296+rsp],rax
	mov	rax,r14
	mul	r9
	mov	r9,r11
	mov	r13,rax
	mov	rax,QWORD[((-56))+rsp]
	mov	r14,rdx
	mul	r15
	add	r13,rax
	mov	rax,rbx
	adc	r14,rdx
	mul	rsi
	add	r13,rax
	mov	rax,r8
	mov	r8,rbp
	adc	r14,rdx
	mul	r10
	mov	r10,r12
	add	r13,rax
	mov	rax,rbp
	adc	r14,rdx
	mul	rdi
	add	rax,r13
	adc	rdx,r14
	shr	r10,51
	mov	r14,rbx
	shrd	r9,r12,51
	add	r9,rax
	mov	rax,QWORD[((-32))+rsp]
	adc	r10,rdx
	mov	r13,r9
	and	r13,rcx
	mul	rbx
	mov	r11,rax
	mov	r12,rdx
	mov	rax,QWORD[((-56))+rsp]
	mul	QWORD[72+rsp]
	add	r11,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	r12,rdx
	mul	r15
	add	r11,rax
	mov	rax,rbp
	adc	r12,rdx
	mul	rsi
	add	r11,rax
	mov	rax,rdi
	adc	r12,rdx
	mul	QWORD[((-104))+rsp]
	mov	rdi,rax
	mov	rbp,rdx
	mov	rax,r9
	add	rdi,r11
	mov	rdx,r10
	adc	rbp,r12
	shr	rdx,51
	shrd	rax,r10,51
	mov	r12,rdx
	mov	r11,rax
	mov	rax,QWORD[((-32))+rsp]
	add	r11,rdi
	mov	rdx,r11
	adc	r12,rbp
	mov	rbp,r8
	and	rdx,rcx
	mov	rdi,r12
	mov	rbx,rdx
	mul	r8
	mov	r9,rax
	mov	r10,rdx
	mov	rax,QWORD[((-56))+rsp]
	mul	QWORD[56+rsp]
	add	r9,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	r10,rdx
	mul	QWORD[72+rsp]
	add	r9,rax
	mov	rax,r14
	adc	r10,rdx
	mul	r15
	add	r9,rax
	mov	rax,rsi
	mov	rsi,r11
	adc	r10,rdx
	mul	QWORD[((-104))+rsp]
	add	rax,r9
	adc	rdx,r10
	shr	rdi,51
	shrd	rsi,r12,51
	add	rsi,rax
	mov	rax,QWORD[((-32))+rsp]
	adc	rdi,rdx
	mov	rdx,rsi
	and	rdx,rcx
	mov	r8,rdx
	mul	QWORD[((-104))+rsp]
	mov	r9,rax
	mov	r10,rdx
	mov	rax,QWORD[160+rsp]
	mul	QWORD[((-56))+rsp]
	mov	r12,QWORD[272+rsp]
	add	r9,rax
	mov	rax,r15
	mov	r15,QWORD[288+rsp]
	adc	r10,rdx
	mul	rbp
	add	r9,rax
	mov	rax,QWORD[56+rsp]
	adc	r10,rdx
	mul	QWORD[((-120))+rsp]
	add	r9,rax
	mov	rax,QWORD[72+rsp]
	adc	r10,rdx
	mul	r14
	mov	r14,QWORD[280+rsp]
	add	rax,r9
	adc	rdx,r10
	shrd	rsi,rdi,51
	shr	rdi,51
	mov	r9,rsi
	mov	r10,rdi
	lea	rdi,[r8*1+r12]
	add	r9,rax
	adc	r10,rdx
	mov	rdx,r9
	shrd	r9,r10,51
	and	rdx,rcx
	lea	rax,[r9*8+r9]
	lea	rbp,[rdx*1+r14]
	lea	rax,[rax*2+r9]
	add	rax,QWORD[296+rsp]
	mov	r10,rax
	shr	rax,51
	add	r13,rax
	and	r10,rcx
	mov	rax,r13
	shr	r13,51
	lea	r11,[r10*1+r15]
	and	rax,rcx
	add	r13,rbx
	mov	r9,rax
	mov	rax,QWORD[208+rsp]
	lea	rbx,[r9*1+rax]
	mov	rax,QWORD[216+rsp]
	lea	rsi,[r13*1+rax]
	mov		rax,18014398509481832
	add	rax,r15
	mov		r15,18014398509481976
	sub	rax,r10
	add	r15,r12
	mov	QWORD[72+rsp],rax
	mov		rax,18014398509481976
	add	rax,QWORD[208+rsp]
	sub	r15,r8
	sub	rax,r9
	mov	QWORD[56+rsp],rax
	mov		rax,18014398509481976
	add	rax,QWORD[216+rsp]
	sub	rax,r13
	mov	r13,rax
	mov		rax,18014398509481976
	add	rax,r14
	lea	r14,[r11*1+r11]
	sub	rax,rdx
	lea	rdx,[rbx*1+rbx]
	mov	QWORD[((-32))+rsp],rax
	lea	rax,[rbp*8+rbp]
	mov	QWORD[160+rsp],rdx
	lea	rdx,[rax*2+rbp]
	mov	rax,r11
	lea	r8,[rdx*1+rdx]
	mov	QWORD[272+rsp],rdx
	mul	r11
	mov	r11,rax
	mov	rax,r8
	mov	r12,rdx
	mul	rbx
	add	r11,rax
	lea	rax,[rsi*8+rsi]
	adc	r12,rdx
	lea	rax,[rax*2+rsi]
	add	rax,rax
	mul	rdi
	add	r11,rax
	lea	rax,[rdi*8+rdi]
	mov	r9,r11
	adc	r12,rdx
	and	r9,rcx
	mov	QWORD[208+rsp],r9
	lea	r9,[rax*2+rdi]
	mov	rax,r9
	mul	rdi
	mov	r9,rax
	mov	rax,rbx
	mov	r10,rdx
	mul	r14
	add	r9,rax
	mov	rax,r8
	adc	r10,rdx
	mul	rsi
	add	rax,r9
	mov	r9,r11
	adc	rdx,r10
	mov	r10,r12
	shrd	r9,r12,51
	shr	r10,51
	add	r9,rax
	mov	rax,rbx
	adc	r10,rdx
	mov	r12,r9
	mul	rbx
	and	r12,rcx
	mov	rbx,QWORD[160+rsp]
	mov	QWORD[216+rsp],r12
	mov	r11,rax
	mov	rax,r8
	mov	r12,rdx
	mul	rdi
	add	r11,rax
	mov	rax,r14
	adc	r12,rdx
	mul	rsi
	add	rax,r11
	adc	rdx,r12
	shrd	r9,r10,51
	shr	r10,51
	add	r9,rax
	mov	rax,rdi
	adc	r10,rdx
	mov	r8,r9
	mul	r14
	and	r8,rcx
	mov	r11,rax
	mov	rax,QWORD[272+rsp]
	mov	r12,rdx
	mul	rbp
	add	r11,rax
	mov	rax,rbx
	adc	r12,rdx
	mul	rsi
	add	rax,r11
	adc	rdx,r12
	shrd	r9,r10,51
	shr	r10,51
	mov	r11,r9
	mov	r12,r10
	add	r11,rax
	mov	rax,rbx
	adc	r12,rdx
	mov	QWORD[160+rsp],r11
	mul	rdi
	mov	r9,rax
	mov	rax,rsi
	mov	r10,rdx
	mul	rsi
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r14
	add	rsi,r9
	adc	rdi,r10
	mov	r10,QWORD[72+rsp]
	mul	rbp
	mov	rbp,QWORD[56+rsp]
	add	rsi,rax
	adc	rdi,rdx
	mov	rax,rsi
	shrd	r11,r12,51
	mov	rdx,rdi
	shr	r12,51
	add	rax,r11
	adc	rdx,r12
	mov	QWORD[272+rsp],rax
	shrd	rax,rdx,51
	mov	rsi,rax
	lea	rax,[rax*8+rax]
	lea	rdx,[rax*2+rsi]
	add	rdx,QWORD[208+rsp]
	mov	rax,QWORD[216+rsp]
	lea	rsi,[r10*1+r10]
	mov	QWORD[208+rsp],rdx
	shr	rdx,51
	add	rax,rdx
	mov	QWORD[216+rsp],rax
	shr	rax,51
	lea	rbx,[r8*1+rax]
	mov	r8,QWORD[((-32))+rsp]
	mov	QWORD[280+rsp],rbx
	lea	rbx,[rbp*1+rbp]
	lea	rax,[r8*8+r8]
	lea	r8,[rax*2+r8]
	mov	rax,r10
	mul	r10
	lea	rdi,[r8*1+r8]
	mov	r11,rax
	mov	rax,rbp
	mov	r12,rdx
	mul	rdi
	add	r11,rax
	lea	rax,[r13*8+r13]
	adc	r12,rdx
	lea	rax,[rax*2+r13]
	add	rax,rax
	mul	r15
	add	r11,rax
	lea	rax,[r15*8+r15]
	adc	r12,rdx
	mov	r10,r11
	lea	r9,[rax*2+r15]
	and	r10,rcx
	mov	QWORD[72+rsp],r10
	mov	rax,r9
	mul	r15
	mov	r9,rax
	mov	rax,rbp
	mov	r10,rdx
	mul	rsi
	add	r9,rax
	mov	rax,rdi
	adc	r10,rdx
	mul	r13
	add	rax,r9
	mov	r9,r11
	adc	rdx,r10
	mov	r10,r12
	shrd	r9,r12,51
	shr	r10,51
	add	r9,rax
	mov	rax,rbp
	adc	r10,rdx
	mov	r12,r9
	mul	rbp
	and	r12,rcx
	mov	r14,r12
	mov	r11,rax
	mov	rax,rdi
	mov	r12,rdx
	mul	r15
	add	r11,rax
	mov	rax,rsi
	adc	r12,rdx
	mul	r13
	add	rax,r11
	adc	rdx,r12
	shrd	r9,r10,51
	shr	r10,51
	mov	r11,r9
	mov	r12,r10
	add	r11,rax
	mov	rax,r15
	adc	r12,rdx
	mov	r9,r11
	mul	rsi
	and	r9,rcx
	mov	QWORD[56+rsp],r9
	mov	r9,rax
	mov	rax,r8
	mov	r8,QWORD[((-32))+rsp]
	mov	r10,rdx
	mul	r8
	add	r9,rax
	mov	rax,r13
	adc	r10,rdx
	mul	rbx
	add	rax,r9
	mov	r9,r11
	adc	rdx,r10
	mov	r10,r12
	shrd	r9,r12,51
	shr	r10,51
	add	r9,rax
	mov	rax,r15
	adc	r10,rdx
	mov	r12,r9
	mul	rbx
	and	r12,rcx
	mov	rbp,r12
	mov	r11,rax
	mov	rax,r13
	mov	r12,rdx
	mul	r13
	add	r11,rax
	mov	rax,r8
	adc	r12,rdx
	mul	rsi
	add	rax,r11
	adc	rdx,r12
	mov	r12,QWORD[336+rsp]
	shrd	r9,r10,51
	shr	r10,51
	add	rax,r9
	mov	r9,QWORD[24+rsp]
	adc	rdx,r10
	mov	rbx,rax
	mov	r10,QWORD[192+rsp]
	shrd	rax,rdx,51
	and	rbx,rcx
	lea	rdx,[rax*8+rax]
	lea	rsi,[rdx*2+rax]
	add	rsi,QWORD[72+rsp]
	mov	rax,QWORD[328+rsp]
	mul	rbx
	mov	r13,rsi
	shr	rsi,51
	add	rsi,r14
	and	r13,rcx
	mov	r8,r13
	mov	r13,rsi
	shr	rsi,51
	and	r13,rcx
	mov	r14,rdx
	add	rsi,QWORD[56+rsp]
	mov	rdi,r13
	mov	r13,rax
	mov	rax,r12
	mul	rbp
	add	r13,rax
	mov	rax,r9
	adc	r14,rdx
	mul	r8
	add	r13,rax
	mov	rax,r10
	adc	r14,rdx
	mul	rdi
	add	r13,rax
	mov	rax,QWORD[200+rsp]
	adc	r14,rdx
	mul	rsi
	add	r13,rax
	mov	rax,r12
	adc	r14,rdx
	mov	r15,r13
	mul	rbx
	and	r15,rcx
	mov	r11,rax
	mov	rax,QWORD[200+rsp]
	mov	r12,rdx
	mul	rbp
	add	r11,rax
	mov	rax,QWORD[120+rsp]
	adc	r12,rdx
	mul	r8
	add	r11,rax
	mov	rax,r9
	adc	r12,rdx
	mul	rdi
	add	r11,rax
	mov	rax,r10
	adc	r12,rdx
	mul	rsi
	add	rax,r11
	adc	rdx,r12
	shrd	r13,r14,51
	shr	r14,51
	mov	r11,r13
	mov	r12,r14
	add	r11,rax
	mov	rax,r10
	adc	r12,rdx
	mov	r13,r11
	mul	rbp
	and	r13,rcx
	mov	r14,r13
	mov	r9,rax
	mov	rax,QWORD[200+rsp]
	mov	r10,rdx
	mul	rbx
	add	r9,rax
	mov	rax,QWORD[184+rsp]
	adc	r10,rdx
	mul	r8
	add	r9,rax
	mov	rax,QWORD[120+rsp]
	adc	r10,rdx
	mul	rdi
	add	r9,rax
	mov	rax,QWORD[24+rsp]
	adc	r10,rdx
	mul	rsi
	add	rax,r9
	mov	r9,r11
	adc	rdx,r10
	mov	r10,r12
	shrd	r9,r12,51
	shr	r10,51
	add	r9,rax
	mov	rax,QWORD[24+rsp]
	adc	r10,rdx
	mov	r13,r9
	and	r13,rcx
	mul	rbp
	mov	r11,rax
	mov	rax,QWORD[192+rsp]
	mov	r12,rdx
	mul	rbx
	add	r11,rax
	mov	rax,QWORD[264+rsp]
	adc	r12,rdx
	mul	r8
	add	r11,rax
	mov	rax,QWORD[184+rsp]
	adc	r12,rdx
	mul	rdi
	add	r11,rax
	mov	rax,QWORD[120+rsp]
	adc	r12,rdx
	mul	rsi
	add	rax,r11
	adc	rdx,r12
	shrd	r9,r10,51
	shr	r10,51
	mov	r11,r9
	mov	r12,r10
	add	r11,rax
	mov	rax,rbx
	adc	r12,rdx
	mov	QWORD[72+rsp],r11
	mul	QWORD[24+rsp]
	mov	r9,rax
	mov	r10,rdx
	mov	rax,rbp
	mul	QWORD[120+rsp]
	add	r9,rax
	mov	rax,r8
	mov	r8,r11
	adc	r10,rdx
	mul	QWORD[320+rsp]
	add	r9,rax
	mov	rax,rdi
	adc	r10,rdx
	mul	QWORD[264+rsp]
	mov	rdi,rax
	mov	rbp,rdx
	mov	rax,rsi
	add	rdi,r9
	mov	r9,r12
	adc	rbp,r10
	mov	r10,QWORD[((-56))+rsp]
	mul	QWORD[184+rsp]
	add	rdi,rax
	adc	rbp,rdx
	shr	r9,51
	shrd	r8,r12,51
	mov	rdx,r9
	mov	r12,QWORD[((-120))+rsp]
	mov	rax,r8
	add	rax,rdi
	mov	rdi,QWORD[((-104))+rsp]
	adc	rdx,rbp
	mov	r8,rax
	mov	QWORD[288+rsp],rax
	shrd	r8,rdx,51
	lea	rbp,[r12*1+r12]
	lea	rax,[r8*8+r8]
	lea	r8,[rax*2+r8]
	lea	rax,[rdi*8+rdi]
	add	r8,r15
	lea	r11,[rax*2+rdi]
	mov	rbx,r8
	mov	QWORD[56+rsp],r8
	shr	rbx,51
	lea	r8,[r14*1+rbx]
	lea	rbx,[r10*1+r10]
	mov	QWORD[296+rsp],r8
	shr	r8,51
	lea	r15,[r13*1+r8]
	lea	r8,[r11*1+r11]
	mov	QWORD[304+rsp],r15
	mov	r15,QWORD[136+rsp]
	mov	r13,QWORD[144+rsp]
	lea	rax,[r15*8+r15]
	lea	rsi,[rax*2+r15]
	add	rsi,rsi
	mov	rax,rsi
	mul	r13
	mov	rsi,rax
	mov	rax,r10
	mov	rdi,rdx
	mul	r10
	add	rsi,rax
	mov	rax,r12
	adc	rdi,rdx
	mul	r8
	add	rsi,rax
	lea	rax,[r13*8+r13]
	adc	rdi,rdx
	mov	r14,rsi
	lea	r9,[rax*2+r13]
	and	r14,rcx
	mov	rax,r9
	mul	r13
	mov	r9,rax
	mov	rax,r12
	mov	r10,rdx
	mul	rbx
	add	r9,rax
	mov	rax,r15
	adc	r10,rdx
	mul	r8
	add	rax,r9
	adc	rdx,r10
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rax
	mov	rax,r15
	adc	rdi,rdx
	mov	r10,rsi
	mov	QWORD[((-56))+rsp],rsi
	mul	rbx
	mov	QWORD[((-48))+rsp],rdi
	mov	rdi,QWORD[((-120))+rsp]
	and	r10,rcx
	mov	rsi,QWORD[((-56))+rsp]
	mov	r12,r10
	mov	r9,rax
	mov	rax,rdi
	mov	r10,rdx
	mul	rdi
	mov	rdi,QWORD[((-48))+rsp]
	add	r9,rax
	mov	rax,r8
	mov	r8,r13
	adc	r10,rdx
	mul	r13
	add	rax,r9
	adc	rdx,r10
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rax
	mov	rax,r8
	adc	rdi,rdx
	mov	r10,rsi
	mov	QWORD[((-120))+rsp],rsi
	mul	rbx
	and	r10,rcx
	mov	rsi,QWORD[((-120))+rsp]
	mov	r13,r10
	mov	QWORD[((-112))+rsp],rdi
	mov	rdi,QWORD[((-112))+rsp]
	mov	r9,rax
	mov	rax,r15
	mov	r10,rdx
	mul	rbp
	add	r9,rax
	mov	rax,r11
	mov	r11,QWORD[((-104))+rsp]
	adc	r10,rdx
	mul	r11
	add	rax,r9
	adc	rdx,r10
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rax
	mov	rax,rsi
	adc	rdi,rdx
	and	rax,rcx
	mov	QWORD[((-120))+rsp],rax
	mov	rax,r11
	mov	r11,QWORD[((-88))+rsp]
	mul	rbx
	mov	rbx,QWORD[((-24))+rsp]
	mov	r9,rax
	mov	rax,r8
	mov	r10,rdx
	mul	rbp
	mov	rbp,QWORD[40+rsp]
	add	r9,rax
	mov	rax,r15
	adc	r10,rdx
	mul	r15
	add	rax,r9
	adc	rdx,r10
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rax
	adc	rdi,rdx
	mov	r15,rsi
	shrd	rsi,rdi,51
	and	r15,rcx
	lea	rax,[rsi*8+rsi]
	lea	rax,[rax*2+rsi]
	lea	rsi,[rbp*1+rbp]
	add	r14,rax
	mov	rdi,r14
	shr	r14,51
	add	r12,r14
	mov	r14,QWORD[224+rsp]
	and	rdi,rcx
	mov	rdx,r12
	shr	r12,51
	mov	QWORD[((-104))+rsp],rdi
	lea	r9,[r13*1+r12]
	mov	r13,QWORD[8+rsp]
	mov	r12,QWORD[((-72))+rsp]
	and	rdx,rcx
	lea	rdi,[rbx*1+rbx]
	mov	QWORD[((-56))+rsp],rdx
	mov	QWORD[((-32))+rsp],r9
	lea	r8,[r13*1+r13]
	lea	r13,[r14*1+r14]
	mov	rax,r13
	mul	r12
	mov	r13,rax
	mov	rax,rbx
	mov	r14,rdx
	mul	rbx
	mov	rbx,rbp
	add	r13,rax
	mov	rax,rbp
	adc	r14,rdx
	mul	r8
	add	r13,rax
	mov	rax,rbx
	adc	r14,rdx
	mov	rbp,r13
	mul	rdi
	and	rbp,rcx
	mov	r9,rax
	mov	rax,QWORD[168+rsp]
	mov	r10,rdx
	mul	r12
	add	r9,rax
	mov	rax,r11
	adc	r10,rdx
	mul	r8
	add	rax,r9
	mov	r9,QWORD[40+rsp]
	adc	rdx,r10
	shrd	r13,r14,51
	shr	r14,51
	add	r13,rax
	mov	rax,r11
	adc	r14,rdx
	mov	r10,r13
	mul	rdi
	and	r10,rcx
	mov	rbx,r10
	mov	r11,rax
	mov	rax,r9
	mov	r12,rdx
	mul	r9
	mov	r9,QWORD[((-72))+rsp]
	add	r11,rax
	mov	rax,r8
	adc	r12,rdx
	mul	r9
	add	rax,r11
	adc	rdx,r12
	mov	r12,r13
	mov	r13,r14
	shrd	r12,r14,51
	shr	r13,51
	mov	r11,r12
	mov	r12,r13
	mov	r13,QWORD[((-88))+rsp]
	add	r11,rax
	mov	rax,r9
	adc	r12,rdx
	mov	r14,r11
	mul	rdi
	and	r14,rcx
	mov	r8,r14
	mov	r9,rax
	mov	rax,r13
	mov	r10,rdx
	mul	rsi
	add	r9,rax
	mov	rax,QWORD[8+rsp]
	adc	r10,rdx
	mul	QWORD[152+rsp]
	add	rax,r9
	adc	rdx,r10
	shrd	r11,r12,51
	shr	r12,51
	mov	r9,r11
	mov	r10,r12
	add	r9,rax
	mov	rax,QWORD[152+rsp]
	adc	r10,rdx
	mov	r14,r9
	and	r14,rcx
	mul	rdi
	mov	r11,rax
	mov	rax,QWORD[((-72))+rsp]
	mov	r12,rdx
	mul	rsi
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r13
	add	rsi,r11
	adc	rdi,r12
	mul	r13
	add	rsi,rax
	adc	rdi,rdx
	shrd	r9,r10,51
	shr	r10,51
	add	rsi,r9
	adc	rdi,r10
	mov	r12,rsi
	shrd	rsi,rdi,51
	and	r12,rcx
	lea	rax,[rsi*8+rsi]
	mov	QWORD[((-88))+rsp],r12
	lea	r13,[rax*2+rsi]
	lea	rax,[r12*8+r12]
	add	r13,rbp
	lea	rdi,[rax*2+r12]
	mov	rbp,r13
	shr	r13,51
	add	r13,rbx
	and	rbp,rcx
	mov	rbx,r13
	shr	r13,51
	add	r13,r8
	and	rbx,rcx
	lea	rax,[r13*8+r13]
	lea	rsi,[rax*2+r13]
	lea	rax,[r14*8+r14]
	lea	r8,[rax*2+r14]
	mov	rax,QWORD[((-104))+rsp]
	mov	r11,QWORD[((-56))+rsp]
	mul	rbp
	mov	r9,rax
	mov	rax,r11
	mov	r10,rdx
	mul	rdi
	add	r9,rax
	mov	rax,QWORD[((-32))+rsp]
	adc	r10,rdx
	mul	r8
	add	r9,rax
	lea	rax,[rbx*8+rbx]
	adc	r10,rdx
	lea	rax,[rax*2+rbx]
	mul	r15
	add	r9,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	r10,rdx
	mul	rsi
	add	r9,rax
	mov	rax,r11
	adc	r10,rdx
	mov	r12,r9
	mul	rbp
	and	r12,rcx
	mov	QWORD[((-72))+rsp],r12
	mov	r11,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	r12,rdx
	mul	r8
	add	r11,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	r12,rdx
	mul	rbx
	add	r11,rax
	mov	rax,QWORD[((-32))+rsp]
	adc	r12,rdx
	mul	rdi
	add	r11,rax
	mov	rax,rsi
	mov	rsi,QWORD[((-104))+rsp]
	adc	r12,rdx
	mul	r15
	add	rax,r11
	adc	rdx,r12
	shrd	r9,r10,51
	shr	r10,51
	mov	r11,r9
	mov	r12,r10
	add	r11,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	r12,rdx
	mov	r10,r11
	and	r10,rcx
	mul	rdi
	mov	QWORD[((-24))+rsp],r10
	mov	r9,rax
	mov	rax,r8
	mov	r10,rdx
	mul	r15
	add	r9,rax
	mov	rax,QWORD[((-32))+rsp]
	adc	r10,rdx
	mul	rbp
	add	r9,rax
	mov	rax,QWORD[((-56))+rsp]
	adc	r10,rdx
	mul	rbx
	add	r9,rax
	mov	rax,rsi
	adc	r10,rdx
	mul	r13
	add	rax,r9
	adc	rdx,r10
	shrd	r11,r12,51
	shr	r12,51
	add	r11,rax
	mov	rax,rsi
	adc	r12,rdx
	mov	QWORD[8+rsp],r11
	and	r11,rcx
	mul	r14
	mov	r8,r11
	mov	QWORD[16+rsp],r12
	mov	r11,QWORD[8+rsp]
	mov	r12,QWORD[16+rsp]
	mov	r9,rax
	mov	rax,rdi
	mov	r10,rdx
	mul	r15
	mov	rsi,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rdi,rdx
	add	rsi,r9
	adc	rdi,r10
	mul	rbp
	add	rsi,rax
	mov	rax,QWORD[((-32))+rsp]
	adc	rdi,rdx
	mul	rbx
	add	rsi,rax
	mov	rax,QWORD[((-56))+rsp]
	adc	rdi,rdx
	mul	r13
	add	rsi,rax
	mov	rax,rbp
	adc	rdi,rdx
	shrd	r11,r12,51
	shr	r12,51
	add	rsi,r11
	mov	r11,QWORD[((-104))+rsp]
	adc	rdi,r12
	mov	r12,QWORD[((-120))+rsp]
	mov	QWORD[40+rsp],rsi
	mul	r15
	mov	r9,rax
	mov	r10,rdx
	mov	rax,r11
	mul	QWORD[((-88))+rsp]
	add	r9,rax
	mov	rax,QWORD[((-56))+rsp]
	adc	r10,rdx
	mul	r14
	add	r9,rax
	mov	rax,r12
	adc	r10,rdx
	mul	rbx
	add	r9,rax
	mov	rax,QWORD[((-32))+rsp]
	adc	r10,rdx
	mul	r13
	add	rax,r9
	adc	rdx,r10
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rax,rsi
	adc	rdx,rdi
	mov	rsi,rax
	mov	QWORD[136+rsp],rax
	shrd	rsi,rdx,51
	mov	rdi,QWORD[((-72))+rsp]
	lea	rax,[rsi*8+rsi]
	lea	rax,[rax*2+rsi]
	mov		rsi,18014398509481832
	add	rdi,rax
	lea	rax,[r11*1+rsi]
	add	rsi,144
	mov	r9,rdi
	add	rsi,QWORD[((-56))+rsp]
	mov	QWORD[144+rsp],rdi
	shr	r9,51
	add	r9,QWORD[((-24))+rsp]
	sub	rsi,rbx
	mov	r10,r9
	mov	rbx,rsi
	mov	QWORD[152+rsp],r9
	shr	r10,51
	mov		rsi,18014398509481976
	add	r10,r8
	mov	r8,rax
	mov	QWORD[8+rsp],r10
	add	rsi,QWORD[((-32))+rsp]
	sub	r8,rbp
	mov	rbp,r8
	mov	r8,rsi
	mov		rsi,18014398509481976
	lea	r11,[r12*1+rsi]
	lea	rax,[rsi*1+r15]
	sub	rax,QWORD[((-88))+rsp]
	sub	r8,r13
	mov	QWORD[((-88))+rsp],rbp
	mov	r12,QWORD[((-120))+rsp]
	mov	r13,r8
	mov	r8,r11
	sub	r8,r14
	mov	QWORD[((-72))+rsp],r13
	mov	r14,r8
	mov	r8,rax
	mov	eax,121665
	mul	rbp
	mov	QWORD[((-24))+rsp],r14
	mov	r11,rax
	mov	rsi,rax
	mov	eax,121665
	mov	rdi,rdx
	shrd	rsi,rdx,51
	mul	rbx
	shr	rdi,51
	add	rsi,rax
	mov	eax,121665
	adc	rdi,rdx
	mov	QWORD[168+rsp],rsi
	mul	r13
	mov	QWORD[176+rsp],rdi
	shrd	rsi,rdi,51
	shr	rdi,51
	mov	r10,rdi
	mov	rdi,rax
	mov	rbp,rdx
	mov	eax,121665
	add	rdi,rsi
	adc	rbp,r10
	mov	r9,rdi
	mul	r14
	mov	r10,rbp
	shrd	r9,rbp,51
	shr	r10,51
	add	r9,rax
	mov	eax,121665
	adc	r10,rdx
	mov	r13,r9
	mul	r8
	mov	r14,r10
	shrd	r13,r10,51
	shr	r14,51
	add	r13,rax
	adc	r14,rdx
	mov	rax,r13
	and	r11,rcx
	shrd	rax,r14,51
	add	r11,QWORD[((-104))+rsp]
	and	rdi,rcx
	add	rdi,QWORD[((-32))+rsp]
	lea	rdx,[rax*8+rax]
	lea	rax,[rdx*2+rax]
	lea	rsi,[rax*1+r11]
	mov	r11,r9
	mov	r9,QWORD[((-88))+rsp]
	and	r11,rcx
	lea	rbp,[r12*1+r11]
	mov	r11,r13
	mov	QWORD[((-104))+rsp],rsi
	and	r11,rcx
	mov	rsi,QWORD[168+rsp]
	add	r15,r11
	lea	rax,[r15*8+r15]
	and	rsi,rcx
	add	rsi,QWORD[((-56))+rsp]
	lea	r14,[rax*2+r15]
	lea	rax,[rdi*8+rdi]
	lea	r11,[rax*2+rdi]
	lea	rax,[rbp*8+rbp]
	lea	r13,[rax*2+rbp]
	lea	rax,[rsi*8+rsi]
	mov	r10,r11
	mov	QWORD[((-56))+rsp],r10
	lea	r11,[rax*2+rsi]
	mov	rax,r11
	mul	r8
	mov	r11,rax
	mov	rax,QWORD[((-24))+rsp]
	mov	r12,rdx
	mul	r10
	add	r11,rax
	mov	rax,QWORD[((-72))+rsp]
	adc	r12,rdx
	mul	r13
	add	r11,rax
	mov	rax,r9
	adc	r12,rdx
	mul	QWORD[((-104))+rsp]
	add	r11,rax
	mov	rax,rbx
	adc	r12,rdx
	mul	r14
	add	r11,rax
	mov	rax,r11
	adc	r12,rdx
	and	rax,rcx
	mov	QWORD[((-120))+rsp],rax
	mov	rax,r9
	mul	rsi
	mov	r9,rax
	mov	rax,QWORD[((-56))+rsp]
	mov	r10,rdx
	mul	r8
	add	r9,rax
	mov	rax,QWORD[((-24))+rsp]
	adc	r10,rdx
	mul	r13
	add	r9,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	r10,rdx
	mul	rbx
	add	r9,rax
	mov	rax,QWORD[((-72))+rsp]
	adc	r10,rdx
	mul	r14
	add	rax,r9
	adc	rdx,r10
	shrd	r11,r12,51
	shr	r12,51
	mov	r9,r11
	mov	r10,r12
	add	r9,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	r10,rdx
	mov	r12,r9
	and	r12,rcx
	mul	rdi
	mov	QWORD[((-32))+rsp],r12
	mov	r11,rax
	mov	rax,rbx
	mov	r12,rdx
	mul	rsi
	add	r11,rax
	mov	rax,r13
	adc	r12,rdx
	mul	r8
	add	r11,rax
	mov	rax,QWORD[((-72))+rsp]
	adc	r12,rdx
	mul	QWORD[((-104))+rsp]
	add	r11,rax
	mov	rax,QWORD[((-24))+rsp]
	adc	r12,rdx
	mul	r14
	add	rax,r11
	adc	rdx,r12
	shrd	r9,r10,51
	shr	r10,51
	add	r9,rax
	mov	rax,rbx
	adc	r10,rdx
	mov	r11,r9
	mul	rdi
	and	r11,rcx
	mov	QWORD[((-48))+rsp],r10
	mov	r13,r11
	mov	r11,rax
	mov	rax,QWORD[((-72))+rsp]
	mov	r12,rdx
	mul	rsi
	add	r11,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	r12,rdx
	mul	rbp
	add	r11,rax
	mov	rax,QWORD[((-24))+rsp]
	adc	r12,rdx
	mul	QWORD[((-104))+rsp]
	add	r11,rax
	mov	rax,r14
	adc	r12,rdx
	mul	r8
	add	rax,r11
	adc	rdx,r12
	shrd	r9,r10,51
	shr	r10,51
	add	r9,rax
	mov	rax,QWORD[((-24))+rsp]
	adc	r10,rdx
	mov	r14,r9
	mul	rsi
	mov	r11,rax
	mov	rax,QWORD[((-72))+rsp]
	mov	r12,rdx
	mul	rdi
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,rbx
	add	rsi,r11
	adc	rdi,r12
	mul	rbp
	mov	rbp,QWORD[104+rsp]
	add	rsi,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	rdi,rdx
	mul	r15
	mov	r15,QWORD[144+rsp]
	add	rsi,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rdi,rdx
	mul	r8
	mov	r8,QWORD[152+rsp]
	add	rsi,rax
	adc	rdi,rdx
	mov	rdx,QWORD[216+rsp]
	shrd	r9,r10,51
	shr	r10,51
	add	rsi,r9
	adc	rdi,r10
	mov	rbx,rsi
	mov	r10,QWORD[128+rsp]
	shrd	rsi,rdi,51
	lea	rax,[rsi*8+rsi]
	lea	r12,[rax*2+rsi]
	add	r12,QWORD[((-120))+rsp]
	mov	rsi,QWORD[208+rsp]
	mov	rax,r10
	and	rax,rcx
	mov	r9,rsi
	and	rsi,rcx
	mov	r11,r12
	xor	r9,r15
	and	r15,rcx
	shr	r11,51
	add	r11,QWORD[((-32))+rsp]
	and	r9,rax
	xor	rsi,r9
	xor	r15,r9
	mov	QWORD[rbp],rsi
	mov	QWORD[((-88))+rsp],rsi
	mov	rsi,rdx
	xor	rsi,r8
	and	r8,rcx
	and	rdx,rcx
	mov	rdi,r11
	and	rsi,rax
	mov	r9,r8
	shr	rdi,51
	xor	r9,rsi
	xor	rsi,rdx
	add	rdi,r13
	mov	r13,QWORD[232+rsp]
	mov	rdx,QWORD[280+rsp]
	mov	QWORD[((-56))+rsp],r9
	mov	QWORD[8+rbp],rsi
	mov	QWORD[8+r13],r9
	mov	r9,QWORD[8+rsp]
	mov	QWORD[r13],r15
	xor	r9,rdx
	mov	r8,r9
	and	r8,r10
	mov	r10,QWORD[8+rsp]
	mov	r9,r8
	xor	r9,rdx
	xor	r10,r8
	mov	rdx,r9
	mov	r8,QWORD[160+rsp]
	mov	QWORD[16+rbp],rdx
	mov	QWORD[((-24))+rsp],r9
	mov	r9,rbp
	mov	rbp,QWORD[40+rsp]
	mov	QWORD[16+r13],r10
	mov	rdx,r8
	and	r8,rcx
	xor	rdx,rbp
	and	rbp,rcx
	and	rdx,rax
	xor	rbp,rdx
	xor	r8,rdx
	mov	rdx,r9
	mov	QWORD[24+r13],rbp
	mov	QWORD[24+rdx],r8
	mov	QWORD[((-72))+rsp],rbp
	mov	QWORD[40+rsp],r8
	mov	r9,QWORD[272+rsp]
	mov	rbp,QWORD[136+rsp]
	mov	rdx,r9
	xor	rdx,rbp
	mov	r8,rdx
	mov	rdx,rbp
	mov	rbp,QWORD[((-8))+rsp]
	and	r8,rax
	and	rdx,rcx
	xor	rdx,r8
	mov	QWORD[32+r13],rdx
	mov	QWORD[((-32))+rsp],rdx
	mov	r13,r9
	mov	rdx,QWORD[104+rsp]
	mov	r9,QWORD[56+rsp]
	and	r13,rcx
	xor	r13,r8
	mov		r8,2251799813685247
	mov	QWORD[((-120))+rsp],r13
	mov	QWORD[32+rdx],r13
	mov	rdx,r9
	and	r8,r9
	xor	rdx,r12
	mov	r9,r8
	mov		r13,2251799813685247
	and	rdx,rax
	and	r12,r13
	mov		r8,2251799813685247
	xor	r9,rdx
	xor	r12,rdx
	mov	r13,QWORD[88+rsp]
	mov	QWORD[rbp],r9
	mov	QWORD[((-104))+rsp],r9
	mov	r9,QWORD[296+rsp]
	mov	QWORD[r13],r12
	mov	rdx,r9
	xor	rdx,r11
	and	r11,r8
	and	rdx,rax
	xor	r11,rdx
	mov	QWORD[8+r13],r11
	mov	r13,r8
	and	r13,r9
	mov	r9,QWORD[88+rsp]
	xor	rdx,r13
	mov	QWORD[8+rbp],rdx
	mov	rbp,QWORD[304+rsp]
	mov	r13,rbp
	xor	r13,rdi
	and	r13,QWORD[128+rsp]
	mov	r8,r13
	xor	rdi,r13
	xor	r8,rbp
	mov	rbp,QWORD[72+rsp]
	mov	QWORD[16+r9],rdi
	mov	r13,r8
	mov	QWORD[56+rsp],r8
	mov	r8,QWORD[((-8))+rsp]
	mov	QWORD[16+r8],r13
	mov	r13,QWORD[72+rsp]
	mov		r8,2251799813685247
	and	rbp,r8
	xor	r13,r14
	and	r14,r8
	mov	r8,QWORD[((-8))+rsp]
	and	r13,rax
	xor	r14,r13
	xor	r13,rbp
	mov	rbp,QWORD[288+rsp]
	mov	QWORD[24+r8],r13
	mov	QWORD[24+r9],r14
	mov	r8,rbp
	xor	r8,rbx
	and	r8,rax
	mov		rax,2251799813685247
	and	rbx,rax
	and	rax,rbp
	xor	rbx,r8
	xor	rax,r8
	mov	r8,QWORD[((-8))+rsp]
	mov	QWORD[32+r9],rbx
	mov	QWORD[32+r8],rax
	sal	BYTE[315+rsp],1
	sub	DWORD[316+rsp],1
	jne	NEAR $L$10
	mov	r9,rdx
	mov	rdx,QWORD[88+rsp]
	mov	QWORD[72+rsp],r15
	mov	r15,rsi
	mov	rsi,QWORD[104+rsp]
	mov	rbp,QWORD[((-72))+rsp]
	sub	QWORD[344+rsp],1
	mov	r8,rax
	mov	QWORD[8+rsp],rdx
	mov	rdx,QWORD[248+rsp]
	mov	QWORD[((-72))+rsp],rsi
	mov	rsi,QWORD[232+rsp]
	mov	rax,QWORD[344+rsp]
	mov	QWORD[104+rsp],rdx
	mov	rdx,QWORD[240+rsp]
	mov	QWORD[232+rsp],rdx
	mov	rdx,QWORD[256+rsp]
	mov	QWORD[88+rsp],rdx
	lea	rdx,[359+rsp]
	cmp	rdx,rax
	jne	NEAR $L$3
	lea	rax,[rbx*8+rbx]
	mov	QWORD[184+rsp],rbp
	mov	r8,rbx
	mov	r15,r14
	mov	r13,r11
	mov	r11,r12
	lea	rbp,[rax*2+rbx]
	lea	rax,[rdi*8+rdi]
	mov	QWORD[168+rsp],r10
	mov	r9,rdi
	lea	r14,[r12*1+r12]
	lea	r12,[r13*1+r13]
	lea	rax,[rax*2+rdi]
	lea	r10,[rbp*1+rbp]
	lea	rbx,[rax*1+rax]
	mov	QWORD[56+rsp],rax
	mov	rax,rbx
	mul	r15
	mov	rcx,rax
	mov	rax,r11
	mov	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,r10
	adc	rbx,rdx
	mul	r13
	mov	rsi,rax
	mov	rdi,rdx
	lea	rax,[r15*8+r15]
	add	rsi,rcx
	adc	rdi,rbx
	mov	QWORD[((-120))+rsp],rsi
	mov		rbx,2251799813685247
	mov	rcx,rdi
	lea	rdi,[rax*2+r15]
	mov	rax,r13
	mul	r14
	and	rbx,QWORD[((-120))+rsp]
	mov	QWORD[((-112))+rsp],rcx
	mov	rsi,QWORD[((-120))+rsp]
	mov	QWORD[8+rsp],rdi
	mov	rcx,rax
	mov	rax,rdi
	mov	QWORD[((-104))+rsp],rbx
	mov	rbx,rdx
	mov	rdi,QWORD[((-112))+rsp]
	mul	r15
	add	rcx,rax
	mov	rax,r10
	adc	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	mov		rcx,2251799813685247
	adc	rdi,rbx
	and	rcx,rsi
	mul	r9
	mov	QWORD[((-88))+rsp],rcx
	mov	rcx,rax
	mov	rax,r13
	mov	rbx,rdx
	mul	r13
	add	rcx,rax
	mov	rax,r10
	mov		r10,2251799813685247
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	mov	rax,rsi
	adc	rdi,rbx
	mov		rsi,2251799813685247
	mov	QWORD[((-120))+rsp],rax
	mov	rax,r15
	and	rsi,QWORD[((-120))+rsp]
	mul	r14
	mov	QWORD[((-112))+rsp],rdi
	mov	rdi,QWORD[((-112))+rsp]
	mov	QWORD[((-72))+rsp],rsi
	mov	rsi,QWORD[((-120))+rsp]
	mov	rcx,rax
	mov	rax,r9
	mov	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,r14
	mov		r14,2251799813685247
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	adc	rdi,rbx
	and	r10,rsi
	mul	r8
	mov	rcx,rax
	mov	rax,r12
	mov	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,r9
	adc	rbx,rdx
	mul	r9
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	rcx,rsi
	mov		rbx,2251799813685247
	shrd	rcx,rdi,51
	and	r14,rsi
	mov		rsi,2251799813685247
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[((-104))+rsp]
	and	rbx,rax
	shr	rax,51
	add	rax,QWORD[((-88))+rsp]
	mov	QWORD[((-24))+rsp],rbx
	lea	r12,[rbx*1+rbx]
	and	rsi,rax
	shr	rax,51
	add	rax,QWORD[((-72))+rsp]
	lea	rcx,[rsi*1+rsi]
	mov	QWORD[((-88))+rsp],rcx
	mov	QWORD[((-120))+rsp],rax
	lea	rax,[r14*8+r14]
	lea	rcx,[rax*2+r14]
	mov	rax,rsi
	lea	rdi,[rcx*1+rcx]
	mov	QWORD[80+rsp],rcx
	mul	rdi
	mov	rcx,rax
	mov	rax,QWORD[((-24))+rsp]
	mov	rbx,rdx
	mul	rax
	add	rcx,rax
	adc	rbx,rdx
	mov	rdx,QWORD[((-120))+rsp]
	lea	rax,[rdx*8+rdx]
	lea	rdx,[rax*2+rdx]
	lea	rax,[rdx*1+rdx]
	mov	QWORD[88+rsp],rdx
	mul	r10
	add	rcx,rax
	lea	rax,[r10*8+r10]
	adc	rbx,rdx
	mov	rdx,rcx
	lea	rax,[rax*2+r10]
	mov	rcx,rbx
	mov	QWORD[((-104))+rsp],rdx
	mov	QWORD[((-96))+rsp],rcx
	mov	rbx,rax
	mov		rax,2251799813685247
	and	rax,QWORD[((-104))+rsp]
	mov	QWORD[128+rsp],rbx
	mov	QWORD[24+rsp],rax
	mov	rax,rbx
	mul	r10
	mov	rcx,rax
	mov	rax,r12
	mov	rbx,rdx
	mul	rsi
	add	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mov	rdx,QWORD[((-96))+rsp]
	shrd	rax,rdx,51
	shr	rdx,51
	add	rcx,rax
	mov	rax,rdi
	mov	rdi,QWORD[((-120))+rsp]
	adc	rbx,rdx
	mov	QWORD[((-104))+rsp],rcx
	mov	rdx,rbx
	mov		rbx,2251799813685247
	and	rbx,QWORD[((-104))+rsp]
	mov	QWORD[((-96))+rsp],rdx
	mul	r10
	mov	QWORD[((-8))+rsp],rbx
	mov	rcx,rax
	mov	rax,rsi
	mov	rbx,rdx
	mul	rsi
	add	rcx,rax
	mov	rax,rdi
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mov	rdx,QWORD[((-96))+rsp]
	shrd	rax,rdx,51
	shr	rdx,51
	add	rcx,rax
	mov	rax,QWORD[80+rsp]
	adc	rbx,rdx
	mov	QWORD[((-104))+rsp],rcx
	mov	rdx,rbx
	mov		rbx,2251799813685247
	and	rbx,QWORD[((-104))+rsp]
	mov	QWORD[((-96))+rsp],rdx
	mul	r14
	mov	QWORD[((-72))+rsp],rbx
	mov	rcx,rax
	mov	rax,r12
	mov	rbx,rdx
	mul	r10
	add	rcx,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	rbx,rdx
	mul	rdi
	mov		rdi,2251799813685247
	add	rax,rcx
	mov	rcx,QWORD[((-104))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-96))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	adc	rbx,rdx
	mov	QWORD[((-104))+rsp],rcx
	and	rdi,QWORD[((-104))+rsp]
	mov	QWORD[((-96))+rsp],rbx
	mov	rbx,QWORD[((-120))+rsp]
	mov	rax,rbx
	mul	rbx
	mov	QWORD[40+rsp],rax
	mov	rax,QWORD[((-88))+rsp]
	mov	QWORD[48+rsp],rdx
	mul	r10
	mov	rcx,rdx
	mov	rdx,rax
	add	rdx,QWORD[40+rsp]
	adc	rcx,QWORD[48+rsp]
	mov	rax,r12
	mov	rbx,rcx
	mov	rcx,rdx
	mul	r14
	add	rax,rcx
	mov	rcx,QWORD[((-104))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-96))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	adc	rbx,rdx
	mov		rdx,2251799813685247
	and	rdx,rcx
	shrd	rcx,rbx,51
	mov	QWORD[((-88))+rsp],rdx
	mov		rdx,2251799813685247
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[24+rsp]
	mov		rcx,2251799813685247
	and	rcx,rax
	shr	rax,51
	add	rax,QWORD[((-8))+rsp]
	mov	r12,QWORD[((-72))+rsp]
	and	rdx,rax
	shr	rax,51
	add	r12,rax
	lea	rax,[rcx*1+rcx]
	mov	QWORD[((-8))+rsp],rdx
	mov	QWORD[((-104))+rsp],rax
	lea	rax,[rdx*1+rdx]
	mov	rdx,QWORD[((-88))+rsp]
	mov	QWORD[24+rsp],rax
	lea	rax,[rdx*8+rdx]
	lea	rax,[rax*2+rdx]
	mov	QWORD[136+rsp],rax
	add	rax,rax
	mov	QWORD[((-72))+rsp],rax
	mov	rax,rcx
	mul	rcx
	mov	rcx,rax
	mov	rbx,rdx
	mov	rax,QWORD[((-72))+rsp]
	mul	QWORD[((-8))+rsp]
	add	rcx,rax
	lea	rax,[r12*8+r12]
	adc	rbx,rdx
	lea	rax,[rax*2+r12]
	add	rax,rax
	mul	rdi
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov		rcx,2251799813685247
	mov	QWORD[40+rsp],rax
	lea	rax,[rdi*8+rdi]
	mov	QWORD[48+rsp],rbx
	and	rcx,QWORD[40+rsp]
	lea	rbx,[rax*2+rdi]
	mov	rax,rbx
	mul	rdi
	mov	QWORD[104+rsp],rcx
	mov	rbx,rdx
	mov	rcx,rax
	mov	rax,QWORD[((-8))+rsp]
	mul	QWORD[((-104))+rsp]
	add	rcx,rax
	mov	rax,QWORD[((-72))+rsp]
	adc	rbx,rdx
	mul	r12
	add	rax,rcx
	mov	rcx,QWORD[40+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[48+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	adc	rbx,rdx
	mov	rax,rcx
	mov		rcx,2251799813685247
	mov	QWORD[48+rsp],rbx
	mov	rbx,QWORD[((-8))+rsp]
	mov	QWORD[40+rsp],rax
	and	rcx,QWORD[40+rsp]
	mov	rax,rbx
	mul	rbx
	mov	QWORD[120+rsp],rcx
	mov	QWORD[((-8))+rsp],rax
	mov	rax,QWORD[((-72))+rsp]
	mov	QWORD[rsp],rdx
	mul	rdi
	add	rax,QWORD[((-8))+rsp]
	adc	rdx,QWORD[rsp]
	mov	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	mov	rbx,rdx
	mul	r12
	add	rax,rcx
	mov	rcx,QWORD[40+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[48+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mov	QWORD[((-72))+rsp],rcx
	mov	rdx,rbx
	mov		rbx,2251799813685247
	and	rbx,QWORD[((-72))+rsp]
	mov	QWORD[((-64))+rsp],rdx
	mul	rdi
	mov	QWORD[40+rsp],rbx
	mov	QWORD[((-8))+rsp],rax
	mov	QWORD[rsp],rdx
	mov	rax,QWORD[136+rsp]
	mul	QWORD[((-88))+rsp]
	add	rax,QWORD[((-8))+rsp]
	adc	rdx,QWORD[rsp]
	mov	rcx,rax
	mov	rax,QWORD[24+rsp]
	mov	rbx,rdx
	mul	r12
	add	rax,rcx
	mov	rcx,QWORD[((-72))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-64))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov		rax,2251799813685247
	adc	rbx,rdx
	mov	QWORD[((-72))+rsp],rcx
	and	rax,QWORD[((-72))+rsp]
	mov	QWORD[((-64))+rsp],rbx
	mov	QWORD[((-8))+rsp],rax
	mov	rax,QWORD[24+rsp]
	mul	rdi
	mov	QWORD[24+rsp],rax
	mov	rax,r12
	mov	QWORD[32+rsp],rdx
	mul	r12
	mov		r12,2251799813685247
	mov	rcx,rdx
	mov	rdx,rax
	add	rdx,QWORD[24+rsp]
	adc	rcx,QWORD[32+rsp]
	mov	rax,QWORD[((-104))+rsp]
	mov	rbx,rcx
	mov	rcx,rdx
	mul	QWORD[((-88))+rsp]
	add	rax,rcx
	mov	rcx,QWORD[((-72))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-64))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	adc	rbx,rdx
	mov		rdx,2251799813685247
	and	rdx,rcx
	shrd	rcx,rbx,51
	mov	rdi,rdx
	mov		rdx,2251799813685247
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[104+rsp]
	and	r12,rax
	shr	rax,51
	add	rax,QWORD[120+rsp]
	and	rdx,rax
	shr	rax,51
	mov	QWORD[((-104))+rsp],rdx
	add	rax,QWORD[40+rsp]
	mov	QWORD[((-72))+rsp],rdi
	mov	QWORD[((-88))+rsp],rax
	lea	rax,[r13*8+r13]
	lea	rbx,[rax*2+r13]
	mov	rax,rbx
	mul	rdi
	mov	rdi,QWORD[((-8))+rsp]
	mov	rcx,rax
	mov	rbx,rdx
	mov	rax,rdi
	mul	QWORD[56+rsp]
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[8+rsp]
	adc	rbx,rdx
	mul	QWORD[((-88))+rsp]
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov		rcx,2251799813685247
	mov	QWORD[((-8))+rsp],rax
	mov	rax,QWORD[56+rsp]
	mul	QWORD[((-72))+rsp]
	and	rcx,QWORD[((-8))+rsp]
	mov	QWORD[rsp],rbx
	mov	QWORD[24+rsp],rcx
	mov	rcx,rax
	mov	rax,QWORD[8+rsp]
	mov	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,r13
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rax,rcx
	mov	rcx,QWORD[((-8))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov		rax,2251799813685247
	adc	rbx,rdx
	mov	QWORD[((-8))+rsp],rcx
	and	rax,QWORD[((-8))+rsp]
	mov	QWORD[rsp],rbx
	mov	QWORD[40+rsp],rax
	mov	rax,rdi
	mul	rbp
	mov	QWORD[56+rsp],rax
	mov	QWORD[64+rsp],rdx
	mov	rax,QWORD[8+rsp]
	mul	QWORD[((-72))+rsp]
	add	rax,QWORD[56+rsp]
	adc	rdx,QWORD[64+rsp]
	mov	rcx,rax
	mov	rax,r9
	mov	rbx,rdx
	mul	r12
	add	rax,rcx
	mov	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rdx,rbx
	mov	rbx,rdx
	mul	r13
	add	rax,rcx
	mov	rcx,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	rdx,rbx
	mov	rbx,rdx
	mul	r11
	add	rax,rcx
	mov	rcx,QWORD[((-8))+rsp]
	mov	QWORD[((-8))+rsp],rdi
	adc	rdx,rbx
	mov	rbx,QWORD[rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov		rax,2251799813685247
	mov	QWORD[8+rsp],rcx
	adc	rbx,rdx
	and	rax,QWORD[8+rsp]
	mov	QWORD[16+rsp],rbx
	mov	QWORD[56+rsp],rax
	mov	rax,rdi
	mul	r11
	mov	QWORD[104+rsp],rax
	mov	QWORD[112+rsp],rdx
	mov	rax,rbp
	mul	QWORD[((-72))+rsp]
	mov	rcx,QWORD[104+rsp]
	mov	rbx,QWORD[112+rsp]
	add	rcx,rax
	mov	rax,r15
	adc	rbx,rdx
	mov	rdi,rcx
	mov	rcx,QWORD[8+rsp]
	mul	r12
	mov	rbp,rbx
	mov	rbx,QWORD[16+rsp]
	add	rdi,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbp,rdx
	mul	r9
	add	rdi,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	rbp,rdx
	mul	r13
	add	rax,rdi
	mov		rdi,2251799813685247
	adc	rdx,rbp
	mov		rbp,2251799813685247
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,QWORD[((-72))+rsp]
	adc	rbx,rdx
	mov	QWORD[8+rsp],rcx
	and	rbp,QWORD[8+rsp]
	mov	QWORD[16+rsp],rbx
	mul	r11
	mov	QWORD[((-72))+rsp],rax
	mov	rax,QWORD[((-8))+rsp]
	mov	QWORD[((-64))+rsp],rdx
	mul	r13
	add	rax,QWORD[((-72))+rsp]
	adc	rdx,QWORD[((-64))+rsp]
	mov	rcx,rax
	mov	rax,r8
	mov	rbx,rdx
	mov	r11,rcx
	mov	rcx,QWORD[8+rsp]
	mul	r12
	mov	r12,rbx
	mov	rbx,QWORD[16+rsp]
	add	r11,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	r12,rdx
	mul	r15
	add	r11,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	r12,rdx
	mul	r9
	add	rax,r11
	mov		r11,2251799813685247
	adc	rdx,r12
	mov		r12,2251799813685247
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	and	r12,rax
	shrd	rax,rdx,51
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[24+rsp]
	and	r11,rax
	shr	rax,51
	add	rax,QWORD[40+rsp]
	mov	r8,QWORD[56+rsp]
	mov	r13,QWORD[80+rsp]
	mov	r15,QWORD[128+rsp]
	and	rdi,rax
	shr	rax,51
	add	r8,rax
	lea	rax,[rsi*8+rsi]
	lea	r9,[rax*2+rsi]
	mov	rax,r9
	mov	r9,QWORD[((-24))+rsp]
	mul	r12
	mov	rcx,rax
	mov	rax,QWORD[88+rsp]
	mov	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,r9
	adc	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,r13
	adc	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,r15
	adc	rbx,rdx
	mul	r8
	add	rcx,rax
	mov		rax,2251799813685247
	mov	QWORD[((-104))+rsp],rcx
	adc	rbx,rdx
	and	rax,QWORD[((-104))+rsp]
	mov	QWORD[((-96))+rsp],rbx
	mov	QWORD[((-88))+rsp],rax
	mov	rax,QWORD[88+rsp]
	mul	r12
	mov	rcx,rax
	mov	rax,r15
	mov	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	mul	rsi
	add	rcx,rax
	mov	rax,r9
	adc	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,r13
	adc	rbx,rdx
	mul	r8
	add	rax,rcx
	mov	rcx,QWORD[((-104))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-96))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov		rcx,2251799813685247
	mov	QWORD[((-104))+rsp],rax
	mov	rax,r13
	and	rcx,QWORD[((-104))+rsp]
	mul	rbp
	mov	QWORD[((-96))+rsp],rbx
	mov	QWORD[((-72))+rsp],rcx
	mov	QWORD[((-24))+rsp],rax
	mov	rax,r15
	mov	QWORD[((-16))+rsp],rdx
	mul	r12
	mov	r15,QWORD[((-120))+rsp]
	mov	rcx,rax
	mov	rax,r15
	add	rcx,QWORD[((-24))+rsp]
	mov	rbx,rdx
	adc	rbx,QWORD[((-16))+rsp]
	mul	r11
	add	rax,rcx
	mov	QWORD[((-120))+rsp],rax
	adc	rdx,rbx
	mov	rax,rdi
	mov	QWORD[((-112))+rsp],rdx
	mul	rsi
	mov	rcx,rax
	mov	rax,r9
	add	rcx,QWORD[((-120))+rsp]
	mov	rbx,rdx
	adc	rbx,QWORD[((-112))+rsp]
	mul	r8
	add	rax,rcx
	mov	rcx,QWORD[((-104))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-96))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,r9
	adc	rbx,rdx
	mov	QWORD[((-120))+rsp],rcx
	mov		rdx,2251799813685247
	and	rdx,QWORD[((-120))+rsp]
	mov	QWORD[((-112))+rsp],rbx
	mov	QWORD[((-104))+rsp],rdx
	mul	rbp
	mov	QWORD[((-24))+rsp],rax
	mov	rax,r13
	mov	QWORD[((-16))+rsp],rdx
	mul	r12
	mov		r13,2251799813685247
	mov	rcx,rax
	mov	rax,r11
	add	rcx,QWORD[((-24))+rsp]
	mov	rbx,rdx
	adc	rbx,QWORD[((-16))+rsp]
	mul	r10
	add	rax,rcx
	mov	QWORD[((-24))+rsp],rax
	adc	rdx,rbx
	mov	rax,r15
	mov	QWORD[((-16))+rsp],rdx
	mul	rdi
	mov	rcx,rax
	mov	rax,r8
	add	rcx,QWORD[((-24))+rsp]
	mov	rbx,rdx
	adc	rbx,QWORD[((-16))+rsp]
	mul	rsi
	add	rax,rcx
	mov	rcx,QWORD[((-120))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-112))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,r9
	mov		r9,2251799813685247
	adc	rbx,rdx
	mov	QWORD[((-120))+rsp],rcx
	and	r13,QWORD[((-120))+rsp]
	mul	r12
	mov	QWORD[((-112))+rsp],rbx
	mov	rcx,QWORD[((-120))+rsp]
	mov	QWORD[24+rsp],r13
	mov	QWORD[((-24))+rsp],rax
	mov	rax,rsi
	mov	QWORD[((-16))+rsp],rdx
	mul	rbp
	mov	rbx,rax
	mov	rax,r14
	add	rbx,QWORD[((-24))+rsp]
	mov	rsi,rdx
	adc	rsi,QWORD[((-16))+rsp]
	mul	r11
	add	rbx,rax
	mov	rax,r10
	adc	rsi,rdx
	mov	r13,rbx
	mov	rbx,QWORD[((-112))+rsp]
	mul	rdi
	mov	r14,rsi
	add	r13,rax
	mov	rax,r15
	mov	r15,QWORD[24+rsp]
	adc	r14,rdx
	mul	r8
	add	rax,r13
	adc	rdx,r14
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	adc	rbx,rdx
	mov		rdx,2251799813685247
	and	rdx,rcx
	shrd	rcx,rbx,51
	mov		rbx,2251799813685247
	mov	QWORD[224+rsp],rdx
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[((-88))+rsp]
	and	rbx,rax
	shr	rax,51
	add	rax,QWORD[((-72))+rsp]
	lea	rsi,[rbx*1+rbx]
	mov	QWORD[128+rsp],rbx
	and	r9,rax
	shr	rax,51
	add	rax,QWORD[((-104))+rsp]
	mov	QWORD[136+rsp],r9
	lea	r14,[r9*1+r9]
	mov	r10,rax
	lea	rax,[rdx*8+rdx]
	mov	QWORD[80+rsp],r10
	lea	rax,[rax*2+rdx]
	lea	r13,[rax*1+rax]
	mov	QWORD[192+rsp],rax
	mov	rax,rbx
	mul	rbx
	mov	rcx,rax
	mov	rax,r9
	mov	rbx,rdx
	mul	r13
	add	rcx,rax
	lea	rax,[r10*8+r10]
	adc	rbx,rdx
	lea	rax,[rax*2+r10]
	add	rax,rax
	mul	r15
	add	rcx,rax
	lea	rax,[r15*8+r15]
	adc	rbx,rdx
	mov	r9,rcx
	mov		rcx,2251799813685247
	mov	r10,rbx
	lea	rbx,[rax*2+r15]
	and	rcx,r9
	mov	r15,rcx
	mov	QWORD[216+rsp],rbx
	mov	rax,QWORD[136+rsp]
	mul	rsi
	mov	rcx,rax
	mov	rbx,rdx
	mov	rax,QWORD[24+rsp]
	mul	QWORD[216+rsp]
	add	rcx,rax
	mov	rax,QWORD[80+rsp]
	adc	rbx,rdx
	mul	r13
	add	rax,rcx
	mov	rcx,r9
	mov	r9,QWORD[136+rsp]
	adc	rdx,rbx
	mov	rbx,r10
	shrd	rcx,r10,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,r9
	adc	rbx,rdx
	mov	QWORD[((-120))+rsp],rcx
	mov	rcx,QWORD[((-120))+rsp]
	mov	rdx,rbx
	mov		rbx,2251799813685247
	and	rbx,QWORD[((-120))+rsp]
	mov	QWORD[((-112))+rsp],rdx
	mul	r9
	mov	QWORD[((-104))+rsp],rbx
	mov	rbx,QWORD[((-112))+rsp]
	mov	r9,rax
	mov	rax,r13
	mov	r13,QWORD[24+rsp]
	mov	r10,rdx
	mul	r13
	add	r9,rax
	mov	rax,QWORD[80+rsp]
	adc	r10,rdx
	mul	rsi
	add	r9,rax
	mov	rax,r13
	adc	r10,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	r9,rcx
	mov		rcx,2251799813685247
	adc	r10,rbx
	and	rcx,r9
	mul	rsi
	mov	QWORD[((-120))+rsp],rcx
	mov	rbx,rdx
	mov	rcx,rax
	mov	rax,QWORD[224+rsp]
	mul	QWORD[192+rsp]
	add	rcx,rax
	mov	rax,QWORD[80+rsp]
	adc	rbx,rdx
	mul	r14
	add	rax,rcx
	adc	rdx,rbx
	shrd	r9,r10,51
	shr	r10,51
	add	r9,rax
	mov		rax,2251799813685247
	adc	r10,rdx
	and	rax,r9
	mov	r13,rax
	mov	rax,r14
	mov	r14,QWORD[80+rsp]
	mul	QWORD[24+rsp]
	mov	rcx,rax
	mov	rax,r14
	mov	rbx,rdx
	mul	r14
	mov		r14,2251799813685247
	add	rcx,rax
	mov	rax,rsi
	mov		rsi,2251799813685247
	adc	rbx,rdx
	mul	QWORD[224+rsp]
	add	rax,rcx
	mov	rcx,r9
	adc	rdx,rbx
	mov	rbx,r10
	shrd	rcx,r10,51
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	and	rsi,rax
	mov	rbx,QWORD[((-104))+rsp]
	shrd	rax,rdx,51
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	rax,[rax*2+rcx]
	add	r15,rax
	and	r14,r15
	shr	r15,51
	lea	rax,[rbx*1+r15]
	mov		r15,2251799813685247
	and	r15,rax
	shr	rax,51
	add	rax,QWORD[((-120))+rsp]
	mov	r10,rax
	lea	rax,[r12*8+r12]
	mov	QWORD[((-120))+rsp],r10
	lea	r9,[rax*2+r12]
	lea	rax,[r8*8+r8]
	lea	rax,[rax*2+r8]
	mov	QWORD[((-104))+rsp],r9
	mov	QWORD[((-72))+rsp],rax
	lea	rax,[rbp*8+rbp]
	lea	rax,[rax*2+rbp]
	mov	QWORD[((-88))+rsp],rax
	lea	rax,[rdi*8+rdi]
	lea	rbx,[rax*2+rdi]
	mov	rax,rbx
	mul	rsi
	mov	rcx,rax
	mov	rax,QWORD[((-72))+rsp]
	mov	rbx,rdx
	mul	r13
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,r9
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,r10
	adc	rbx,rdx
	mul	QWORD[((-88))+rsp]
	add	rcx,rax
	mov	rax,QWORD[((-72))+rsp]
	adc	rbx,rdx
	mov	r9,rcx
	mov	r10,rbx
	mov		rbx,2251799813685247
	mul	rsi
	and	rbx,rcx
	mov	QWORD[((-24))+rsp],rbx
	mov	rcx,rax
	mov	rax,QWORD[((-88))+rsp]
	mov	rbx,rdx
	mul	r13
	add	rcx,rax
	mov	rax,rdi
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	rbx,rdx
	mul	QWORD[((-104))+rsp]
	add	rax,rcx
	mov	rcx,r9
	adc	rdx,rbx
	mov	rbx,r10
	shrd	rcx,r10,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov		rcx,2251799813685247
	mov	QWORD[((-72))+rsp],rax
	mov	rax,QWORD[((-104))+rsp]
	and	rcx,QWORD[((-72))+rsp]
	mov	QWORD[((-64))+rsp],rbx
	mov	rbx,QWORD[((-64))+rsp]
	mul	r13
	mov	QWORD[((-8))+rsp],rcx
	mov	rcx,QWORD[((-72))+rsp]
	mov	r9,rax
	mov	rax,QWORD[((-88))+rsp]
	mov	r10,rdx
	mul	rsi
	add	r9,rax
	mov	rax,r8
	adc	r10,rdx
	mul	r14
	add	r9,rax
	mov	rax,rdi
	adc	r10,rdx
	mul	r15
	add	r9,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	r10,rdx
	mul	r11
	add	rax,r9
	adc	rdx,r10
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov		rax,2251799813685247
	adc	rbx,rdx
	and	rax,rcx
	mov	QWORD[((-88))+rsp],rax
	mov	rax,r11
	mul	r13
	mov	r9,rax
	mov	rax,QWORD[((-104))+rsp]
	mov	r10,rdx
	mul	rsi
	add	r9,rax
	mov	rax,rbp
	adc	r10,rdx
	mul	r14
	add	r9,rax
	mov	rax,r8
	adc	r10,rdx
	mul	r15
	add	r9,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	r10,rdx
	mul	rdi
	add	rax,r9
	mov		r9,2251799813685247
	adc	rdx,r10
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	and	r9,rcx
	mul	rsi
	mov	r10,rax
	mov	rax,rdi
	mov	r11,rdx
	mul	r13
	mov		r13,2251799813685247
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r12
	add	rsi,r10
	adc	rdi,r11
	mul	r14
	add	rsi,rax
	mov	rax,rbp
	mov		rbp,2251799813685247
	adc	rdi,rdx
	mul	r15
	add	rsi,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	rdi,rdx
	mul	r8
	add	rsi,rax
	adc	rdi,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	rdx,rsi
	mov	rbx,QWORD[((-88))+rsp]
	shrd	rdx,rdi,51
	mov		rdi,2251799813685247
	and	r13,rsi
	lea	rax,[rdx*8+rdx]
	lea	rax,[rax*2+rdx]
	add	rax,QWORD[((-24))+rsp]
	and	rbp,rax
	shr	rax,51
	add	rax,QWORD[((-8))+rsp]
	lea	rsi,[rbp*1+rbp]
	and	rdi,rax
	shr	rax,51
	lea	r8,[rbx*1+rax]
	lea	rax,[r13*8+r13]
	lea	r15,[rdi*1+rdi]
	lea	r12,[rax*2+r13]
	mov	rax,rdi
	mov	QWORD[((-8))+rsp],r15
	lea	r14,[r12*1+r12]
	mul	r14
	mov	rcx,rax
	mov	rax,rbp
	mov	rbx,rdx
	mul	rbp
	add	rcx,rax
	lea	rax,[r8*8+r8]
	adc	rbx,rdx
	lea	rax,[rax*2+r8]
	mov	QWORD[((-24))+rsp],rax
	add	rax,rax
	mul	r9
	add	rcx,rax
	lea	rax,[r9*8+r9]
	adc	rbx,rdx
	mov	r10,rcx
	mov		rcx,2251799813685247
	mov	r11,rbx
	lea	rbx,[rax*2+r9]
	and	rcx,r10
	mov	QWORD[((-88))+rsp],rcx
	mov	rax,rbx
	mov	QWORD[((-72))+rsp],rbx
	mul	r9
	mov	rcx,rax
	mov	rax,rsi
	mov	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,r14
	mov		r14,2251799813685247
	adc	rbx,rdx
	mov		rdx,2251799813685247
	shrd	r10,r11,51
	shr	r11,51
	add	r10,rcx
	adc	r11,rbx
	and	rdx,r10
	mov	QWORD[((-104))+rsp],rdx
	mul	r9
	mov	rcx,rax
	mov	rax,rdi
	mov	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	mul	rsi
	add	rcx,rax
	mov	rax,r12
	adc	rbx,rdx
	shrd	r10,r11,51
	shr	r11,51
	add	r10,rcx
	adc	r11,rbx
	and	r14,r10
	mul	r13
	mov	QWORD[((-120))+rsp],r14
	mov	rcx,rax
	mov	rax,rsi
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,r15
	adc	rbx,rdx
	mul	r8
	add	rax,rcx
	mov	rcx,r10
	mov		r10,2251799813685247
	adc	rdx,rbx
	mov	rbx,r11
	shrd	rcx,r11,51
	shr	rbx,51
	mov		r11,2251799813685247
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	and	r10,rcx
	mul	r8
	mov	r14,rax
	mov	rax,QWORD[((-8))+rsp]
	mov	r15,rdx
	mul	r9
	add	r14,rax
	mov	rax,rsi
	mov	rsi,QWORD[((-120))+rsp]
	adc	r15,rdx
	mul	r13
	add	rax,r14
	mov		r14,2251799813685247
	adc	rdx,r15
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	and	r14,rax
	shrd	rax,rdx,51
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[((-88))+rsp]
	mov		rcx,2251799813685247
	and	rcx,rax
	shr	rax,51
	add	rax,QWORD[((-104))+rsp]
	lea	r15,[rcx*1+rcx]
	mov	QWORD[((-120))+rsp],rcx
	and	r11,rax
	shr	rax,51
	add	rsi,rax
	lea	rax,[r14*8+r14]
	lea	rdx,[r11*1+r11]
	lea	rbx,[rax*2+r14]
	mov	QWORD[((-88))+rsp],rdx
	lea	rdx,[rbx*1+rbx]
	mov	QWORD[40+rsp],rbx
	mov	rax,rdx
	mov	QWORD[((-104))+rsp],rdx
	mul	r11
	mov	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rbx,rdx
	mul	rax
	add	rcx,rax
	lea	rax,[rsi*8+rsi]
	adc	rbx,rdx
	lea	rax,[rax*2+rsi]
	add	rax,rax
	mul	r10
	add	rcx,rax
	lea	rax,[r10*8+r10]
	mov	QWORD[((-120))+rsp],rcx
	adc	rbx,rdx
	mov		rdx,2251799813685247
	and	rdx,QWORD[((-120))+rsp]
	lea	rcx,[rax*2+r10]
	mov	QWORD[((-112))+rsp],rbx
	mov	rax,rcx
	mov	QWORD[8+rsp],rdx
	mul	r10
	mov	rcx,rax
	mov	rax,r15
	mov	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mul	rsi
	add	rax,rcx
	mov	rcx,QWORD[((-120))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-112))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov		rcx,2251799813685247
	mov	QWORD[((-120))+rsp],rax
	mov	rax,QWORD[((-104))+rsp]
	and	rcx,QWORD[((-120))+rsp]
	mov	QWORD[((-112))+rsp],rbx
	mul	r10
	mov	QWORD[((-8))+rsp],rcx
	mov	QWORD[((-104))+rsp],rax
	mov	rax,r11
	mov	QWORD[((-96))+rsp],rdx
	mul	r11
	mov		r11,2251799813685247
	mov	rcx,rax
	mov	rax,rsi
	add	rcx,QWORD[((-104))+rsp]
	mov	rbx,rdx
	adc	rbx,QWORD[((-96))+rsp]
	mul	r15
	add	rax,rcx
	mov	rcx,QWORD[((-120))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-112))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rax,rcx
	mov	QWORD[((-120))+rsp],rax
	mov	rax,QWORD[40+rsp]
	adc	rdx,rbx
	mov	QWORD[((-112))+rsp],rdx
	and	r11,QWORD[((-120))+rsp]
	mul	r14
	mov	QWORD[((-104))+rsp],r11
	mov		r11,2251799813685247
	mov	rcx,rax
	mov	rax,r15
	mov	rbx,rdx
	mul	r10
	add	rcx,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	rbx,rdx
	mul	rsi
	add	rax,rcx
	mov	rcx,QWORD[((-120))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-112))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mov	QWORD[((-120))+rsp],rcx
	and	r11,QWORD[((-120))+rsp]
	mul	rsi
	mov	QWORD[((-112))+rsp],rbx
	mov	QWORD[40+rsp],rax
	mov	rax,QWORD[((-88))+rsp]
	mov	QWORD[48+rsp],rdx
	mul	r10
	mov	rbx,rax
	mov	rax,r14
	add	rbx,QWORD[40+rsp]
	mov	rsi,rdx
	adc	rsi,QWORD[48+rsp]
	mov	rcx,QWORD[((-120))+rsp]
	mul	r15
	mov		r14,2251799813685247
	add	rax,rbx
	mov	rbx,QWORD[((-112))+rsp]
	adc	rdx,rsi
	mov	rsi,QWORD[((-104))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	and	r14,rax
	shrd	rax,rdx,51
	mov		rdx,2251799813685247
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[8+rsp]
	mov		rcx,2251799813685247
	and	rcx,rax
	shr	rax,51
	add	rax,QWORD[((-8))+rsp]
	mov	QWORD[((-120))+rsp],rcx
	lea	r15,[rcx*1+rcx]
	and	rdx,rax
	shr	rax,51
	add	rsi,rax
	lea	rax,[r14*8+r14]
	mov	r10,rdx
	lea	rdx,[rdx*1+rdx]
	lea	rbx,[rax*2+r14]
	mov	QWORD[((-88))+rsp],rdx
	lea	rdx,[rbx*1+rbx]
	mov	QWORD[40+rsp],rbx
	mov	rax,rdx
	mov	QWORD[((-104))+rsp],rdx
	mul	r10
	mov	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rbx,rdx
	mul	rax
	add	rcx,rax
	lea	rax,[rsi*8+rsi]
	adc	rbx,rdx
	lea	rax,[rax*2+rsi]
	add	rax,rax
	mul	r11
	add	rcx,rax
	lea	rax,[r11*8+r11]
	adc	rbx,rdx
	mov	QWORD[((-120))+rsp],rcx
	mov		rdx,2251799813685247
	and	rdx,QWORD[((-120))+rsp]
	lea	rcx,[rax*2+r11]
	mov	QWORD[((-112))+rsp],rbx
	mov	rax,rcx
	mov	QWORD[8+rsp],rdx
	mul	r11
	mov	rcx,rax
	mov	rax,r15
	mov	rbx,rdx
	mul	r10
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mul	rsi
	add	rax,rcx
	mov	rcx,QWORD[((-120))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-112))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov		rcx,2251799813685247
	mov	QWORD[((-120))+rsp],rax
	mov	rax,QWORD[((-104))+rsp]
	and	rcx,QWORD[((-120))+rsp]
	mov	QWORD[((-112))+rsp],rbx
	mul	r11
	mov	QWORD[((-8))+rsp],rcx
	mov	QWORD[((-104))+rsp],rax
	mov	rax,r10
	mov	QWORD[((-96))+rsp],rdx
	mul	r10
	mov		r10,2251799813685247
	mov	rcx,rax
	mov	rax,rsi
	add	rcx,QWORD[((-104))+rsp]
	mov	rbx,rdx
	adc	rbx,QWORD[((-96))+rsp]
	mul	r15
	add	rax,rcx
	mov	rcx,QWORD[((-120))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-112))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rax,rcx
	mov	QWORD[((-120))+rsp],rax
	mov	rax,QWORD[40+rsp]
	adc	rdx,rbx
	mov	QWORD[((-112))+rsp],rdx
	and	r10,QWORD[((-120))+rsp]
	mul	r14
	mov	QWORD[((-104))+rsp],r10
	mov	rcx,rax
	mov	rax,r15
	mov	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	rbx,rdx
	mul	rsi
	add	rax,rcx
	mov	rcx,QWORD[((-120))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-112))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mov	QWORD[((-120))+rsp],rcx
	mov	rcx,QWORD[((-120))+rsp]
	mov	rdx,rbx
	mov		rbx,2251799813685247
	and	rbx,QWORD[((-120))+rsp]
	mov	QWORD[((-112))+rsp],rdx
	mul	rsi
	mov	r10,rbx
	mov	QWORD[40+rsp],rax
	mov	rax,QWORD[((-88))+rsp]
	mov	QWORD[48+rsp],rdx
	mul	r11
	mov		r11,2251799813685247
	mov	rbx,rax
	mov	rax,r14
	add	rbx,QWORD[40+rsp]
	mov	rsi,rdx
	adc	rsi,QWORD[48+rsp]
	mov		r14,2251799813685247
	mul	r15
	add	rax,rbx
	mov	rbx,QWORD[((-112))+rsp]
	adc	rdx,rsi
	mov	rsi,QWORD[((-104))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	and	r14,rax
	shrd	rax,rdx,51
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[8+rsp]
	mov		rcx,2251799813685247
	and	rcx,rax
	shr	rax,51
	add	rax,QWORD[((-8))+rsp]
	mov	QWORD[((-120))+rsp],rcx
	lea	r15,[rcx*1+rcx]
	and	r11,rax
	shr	rax,51
	add	rsi,rax
	lea	rax,[r14*8+r14]
	lea	rdx,[r11*1+r11]
	lea	rbx,[rax*2+r14]
	mov	QWORD[((-88))+rsp],rdx
	lea	rdx,[rbx*1+rbx]
	mov	QWORD[40+rsp],rbx
	mov	rax,rdx
	mov	QWORD[((-104))+rsp],rdx
	mul	r11
	mov	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rbx,rdx
	mul	rax
	add	rcx,rax
	lea	rax,[rsi*8+rsi]
	adc	rbx,rdx
	lea	rax,[rax*2+rsi]
	add	rax,rax
	mul	r10
	add	rcx,rax
	lea	rax,[r10*8+r10]
	adc	rbx,rdx
	mov	QWORD[((-120))+rsp],rcx
	mov		rdx,2251799813685247
	and	rdx,QWORD[((-120))+rsp]
	lea	rcx,[rax*2+r10]
	mov	QWORD[((-112))+rsp],rbx
	mov	rax,rcx
	mov	QWORD[8+rsp],rdx
	mul	r10
	mov	rcx,rax
	mov	rax,r15
	mov	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mul	rsi
	add	rax,rcx
	mov	rcx,QWORD[((-120))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-112))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov		rcx,2251799813685247
	mov	QWORD[((-120))+rsp],rax
	mov	rax,QWORD[((-104))+rsp]
	and	rcx,QWORD[((-120))+rsp]
	mov	QWORD[((-112))+rsp],rbx
	mul	r10
	mov	QWORD[((-8))+rsp],rcx
	mov	QWORD[((-104))+rsp],rax
	mov	rax,r11
	mov	QWORD[((-96))+rsp],rdx
	mul	r11
	mov		r11,2251799813685247
	mov	rcx,rax
	mov	rax,rsi
	add	rcx,QWORD[((-104))+rsp]
	mov	rbx,rdx
	adc	rbx,QWORD[((-96))+rsp]
	mul	r15
	add	rax,rcx
	mov	rcx,QWORD[((-120))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-112))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rax,rcx
	mov	QWORD[((-120))+rsp],rax
	mov	rax,QWORD[40+rsp]
	adc	rdx,rbx
	mov	QWORD[((-112))+rsp],rdx
	and	r11,QWORD[((-120))+rsp]
	mul	r14
	mov	QWORD[((-104))+rsp],r11
	mov		r11,2251799813685247
	mov	rcx,rax
	mov	rax,r15
	mov	rbx,rdx
	mul	r10
	add	rcx,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	rbx,rdx
	mul	rsi
	add	rax,rcx
	mov	rcx,QWORD[((-120))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-112))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mov	QWORD[((-120))+rsp],rcx
	and	r11,QWORD[((-120))+rsp]
	mul	rsi
	mov	QWORD[((-112))+rsp],rbx
	mov	rcx,QWORD[((-120))+rsp]
	mov	QWORD[40+rsp],rax
	mov	rax,QWORD[((-88))+rsp]
	mov	QWORD[48+rsp],rdx
	mul	r10
	mov	rbx,rax
	mov	rax,r14
	add	rbx,QWORD[40+rsp]
	mov	rsi,rdx
	adc	rsi,QWORD[48+rsp]
	mov		r14,2251799813685247
	mul	r15
	mov		r15,2251799813685247
	add	rax,rbx
	mov	rbx,QWORD[((-112))+rsp]
	adc	rdx,rsi
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	and	r14,rax
	shrd	rax,rdx,51
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[8+rsp]
	mov		rcx,2251799813685247
	mov	rsi,QWORD[((-104))+rsp]
	and	rcx,rax
	shr	rax,51
	add	rax,QWORD[((-8))+rsp]
	and	r15,rax
	shr	rax,51
	lea	r10,[rsi*1+rax]
	lea	rax,[rcx*1+rcx]
	lea	rsi,[r15*1+r15]
	mov	QWORD[((-120))+rsp],rax
	lea	rax,[r14*8+r14]
	mov	QWORD[((-104))+rsp],rsi
	lea	rdx,[rax*2+r14]
	mov	rax,rcx
	lea	rsi,[rdx*1+rdx]
	mov	QWORD[56+rsp],rdx
	mul	rcx
	mov	QWORD[((-88))+rsp],rsi
	mov	rcx,rax
	mov	rax,rsi
	mov	rbx,rdx
	mul	r15
	mov		rsi,2251799813685247
	add	rcx,rax
	lea	rax,[r10*8+r10]
	adc	rbx,rdx
	lea	rax,[rax*2+r10]
	add	rax,rax
	mul	r11
	add	rcx,rax
	lea	rax,[r11*8+r11]
	adc	rbx,rdx
	mov	QWORD[((-8))+rsp],rcx
	mov	QWORD[rsp],rbx
	mov	rbx,rcx
	and	rbx,rsi
	mov	QWORD[8+rsp],rbx
	lea	rbx,[rax*2+r11]
	mov	rax,rbx
	mul	r11
	mov	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	rbx,rdx
	mul	r10
	add	rax,rcx
	mov	rcx,QWORD[((-8))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,r15
	adc	rbx,rdx
	mov	QWORD[((-8))+rsp],rcx
	and	rcx,rsi
	mul	r15
	mov	r15,QWORD[((-120))+rsp]
	mov	QWORD[40+rsp],rcx
	mov	QWORD[rsp],rbx
	mov	QWORD[88+rsp],rax
	mov	rax,QWORD[((-88))+rsp]
	mov	QWORD[96+rsp],rdx
	mul	r11
	mov	rcx,rax
	mov	rax,r15
	add	rcx,QWORD[88+rsp]
	mov	rbx,rdx
	adc	rbx,QWORD[96+rsp]
	mul	r10
	add	rax,rcx
	mov	rcx,QWORD[((-8))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,r15
	adc	rbx,rdx
	mov	QWORD[((-88))+rsp],rcx
	and	rcx,rsi
	mul	r11
	mov	QWORD[((-80))+rsp],rbx
	mov	QWORD[((-8))+rsp],rcx
	mov	QWORD[88+rsp],rax
	mov	rax,QWORD[56+rsp]
	mov	QWORD[96+rsp],rdx
	mul	r14
	mov	rcx,rax
	add	rcx,QWORD[88+rsp]
	mov	rax,QWORD[((-104))+rsp]
	mov	rbx,rdx
	adc	rbx,QWORD[96+rsp]
	mul	r10
	add	rax,rcx
	mov	rcx,QWORD[((-88))+rsp]
	adc	rdx,rbx
	mov	rbx,QWORD[((-80))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mov	rdx,rcx
	and	rdx,rsi
	mov	r15,rdx
	mul	r11
	mov	QWORD[((-104))+rsp],rax
	mov	rax,r10
	mov	QWORD[((-96))+rsp],rdx
	mul	r10
	mov	r10,rax
	mov	rax,QWORD[((-120))+rsp]
	add	r10,QWORD[((-104))+rsp]
	mov	r11,rdx
	adc	r11,QWORD[((-96))+rsp]
	mul	r14
	add	rax,r10
	adc	rdx,r11
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	adc	rbx,rdx
	mov	r14,rcx
	shrd	rcx,rbx,51
	and	r14,rsi
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[8+rsp]
	mov	r10,rax
	shr	rax,51
	add	rax,QWORD[40+rsp]
	and	r10,rsi
	mov	QWORD[((-104))+rsp],r10
	mov	r11,rax
	shr	rax,51
	add	rax,QWORD[((-8))+rsp]
	and	r11,rsi
	mov	QWORD[((-88))+rsp],r11
	mov	QWORD[((-120))+rsp],rax
	lea	rax,[rdi*8+rdi]
	lea	rcx,[rax*2+rdi]
	mov	rax,rcx
	mul	r14
	mov	rcx,rax
	mov	rax,QWORD[((-24))+rsp]
	mov	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,r10
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	rbx,rdx
	mul	QWORD[((-72))+rsp]
	add	rcx,rax
	mov	rax,QWORD[((-24))+rsp]
	adc	rbx,rdx
	mov	r10,rcx
	and	rcx,rsi
	mov	QWORD[((-8))+rsp],rcx
	mov	r11,rbx
	mul	r14
	mov	rcx,rax
	mov	rax,QWORD[((-72))+rsp]
	mov	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	rbx,rdx
	mul	r12
	add	rax,rcx
	mov	rcx,r10
	adc	rdx,rbx
	mov	rbx,r11
	shrd	rcx,r11,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,r15
	adc	rbx,rdx
	mov	rdx,rcx
	and	rdx,rsi
	mov	QWORD[((-24))+rsp],rdx
	mul	r12
	mov	r10,rax
	mov	rax,QWORD[((-72))+rsp]
	mov	r11,rdx
	mul	r14
	add	r10,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	r11,rdx
	mul	r8
	add	r10,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	r11,rdx
	mul	rdi
	add	r10,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	r11,rdx
	mul	rbp
	add	rax,r10
	adc	rdx,r11
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	and	rax,rsi
	mov	QWORD[((-72))+rsp],rax
	mov	rax,r15
	mul	rbp
	mov	r10,rax
	mov	rax,r12
	mov	r11,rdx
	mul	r14
	add	r10,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	r11,rdx
	mul	r9
	add	r10,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	r11,rdx
	mul	r8
	add	r10,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	r11,rdx
	mul	rdi
	add	rax,r10
	adc	rdx,r11
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mov	QWORD[8+rsp],rcx
	mul	rbp
	mov	QWORD[16+rsp],rbx
	mov	rbx,rcx
	and	rbx,rsi
	mov	rcx,QWORD[8+rsp]
	mov	r10,rbx
	mov	QWORD[104+rsp],rbx
	mov	rbx,QWORD[16+rsp]
	mov	r11,rax
	mov	rax,r15
	mov	r12,rdx
	mul	rdi
	mov	rdi,rax
	mov	rax,QWORD[((-104))+rsp]
	mov	rbp,rdx
	add	rdi,r11
	adc	rbp,r12
	mov	r12,r10
	mul	r13
	mov	r13,rsi
	add	rdi,rax
	mov	rax,QWORD[((-88))+rsp]
	adc	rbp,rdx
	mul	r9
	add	rdi,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	rbp,rdx
	mul	r8
	add	rax,rdi
	adc	rdx,rbp
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	adc	rbx,rdx
	mov	rdx,rcx
	shrd	rcx,rbx,51
	and	rdx,rsi
	lea	rax,[rcx*8+rcx]
	mov	QWORD[208+rsp],rdx
	mov	rbp,rdx
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[((-8))+rsp]
	mov	r9,rax
	shr	rax,51
	add	rax,QWORD[((-24))+rsp]
	and	r9,rsi
	mov	QWORD[((-24))+rsp],10
	mov	QWORD[8+rsp],r9
	mov	rcx,r9
	mov	r14,rax
	shr	rax,51
	add	rax,QWORD[((-72))+rsp]
	and	r14,rsi
	mov	QWORD[40+rsp],r14
	mov	r15,rax
	mov	QWORD[56+rsp],rax


$L$4:
	lea	rax,[rbp*8+rbp]
	lea	r8,[rcx*1+rcx]
	lea	r10,[r14*1+r14]
	lea	rax,[rax*2+rbp]
	mov	QWORD[((-120))+rsp],r10
	lea	r11,[rax*1+rax]
	mov	QWORD[((-72))+rsp],rax
	lea	rax,[r15*8+r15]
	lea	rax,[rax*2+r15]
	lea	rbx,[rax*1+rax]
	mov	rax,rbx
	mul	r12
	mov	rsi,rax
	mov	rax,rcx
	mov	rdi,rdx
	mul	rcx
	mov	rcx,rax
	mov	rbx,rdx
	mov	rax,r11
	add	rcx,rsi
	adc	rbx,rdi
	mul	r14
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	mov	rsi,rcx
	mul	rbp
	mov	rdi,rbx
	mov	rcx,rax
	mov	rax,r10
	mov	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,r15
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	lea	rax,[r12*8+r12]
	mov	QWORD[((-104))+rsp],rcx
	adc	rbx,rdx
	lea	rcx,[rax*2+r12]
	mov	QWORD[((-96))+rsp],rbx
	mov	rbx,rsi
	and	rbx,r13
	mov	rax,rcx
	mov	QWORD[((-88))+rsp],rbx
	mul	r12
	mov	rcx,rax
	mov	rax,r14
	mov	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	rdi,rcx
	mul	r15
	and	rdi,r13
	mov	r10,rdi
	mov	rsi,rax
	mov	rax,r14
	mov	rdi,rdx
	mul	r14
	add	rsi,rax
	mov	rax,r11
	adc	rdi,rdx
	mul	r12
	add	rsi,rax
	mov	rax,r12
	adc	rdi,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	r9,rsi
	mul	r8
	and	r9,r13
	mov	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,QWORD[((-72))+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mov	rdx,QWORD[((-96))+rsp]
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	r12,rcx
	shrd	rcx,rbx,51
	and	r12,r13
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	mov	rbp,rax
	shrd	rax,rdx,51
	and	rbp,r13
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	r15,[rax*2+rcx]
	add	r15,QWORD[((-88))+rsp]
	mov	rcx,r15
	shr	r15,51
	add	r15,r10
	and	rcx,r13
	mov	r14,r15
	shr	r15,51
	and	r14,r13
	add	r15,r9
	sub	QWORD[((-24))+rsp],1
	jne	NEAR $L$4
	mov	rbx,QWORD[208+rsp]
	mov	r11,QWORD[40+rsp]
	mov	r9,rcx
	mov	rcx,QWORD[104+rsp]
	mov	r8,QWORD[8+rsp]
	lea	rax,[rbx*8+rbx]
	lea	rdi,[rax*2+rbx]
	lea	rax,[r11*8+r11]
	mov	rbx,QWORD[56+rsp]
	lea	rax,[rax*2+r11]
	mov	QWORD[88+rsp],rdi
	mov	QWORD[248+rsp],rax
	lea	rax,[rbx*8+rbx]
	lea	rsi,[rax*2+rbx]
	lea	rax,[rcx*8+rcx]
	lea	r10,[rax*2+rcx]
	mov	rax,r8
	mov	QWORD[240+rsp],rsi
	mul	r9
	mov	QWORD[200+rsp],r10
	mov	rcx,rax
	mov	rax,rdi
	mov	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,QWORD[248+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,r10
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mul	r12
	mov	rsi,rax
	mov	rdi,rdx
	add	rsi,rcx
	mov	rax,rsi
	adc	rdi,rbx
	and	rax,r13
	mov	r10,rax
	mov	rax,r8
	mov	r8,r11
	mul	r14
	mov	rcx,rax
	mov	rax,r11
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,QWORD[88+rsp]
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,QWORD[240+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[200+rsp]
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,QWORD[8+rsp]
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	r11,rsi
	mul	r15
	and	r11,r13
	mov	rcx,rax
	mov	rax,QWORD[56+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,QWORD[88+rsp]
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,QWORD[200+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	mov	rax,rsi
	adc	rdi,rbx
	and	rax,r13
	mov	r8,rax
	mov	rax,QWORD[8+rsp]
	mul	r12
	mov	rcx,rax
	mov	rax,QWORD[104+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,QWORD[56+rsp]
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,QWORD[40+rsp]
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,QWORD[88+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	mov	rax,rsi
	adc	rdi,rbx
	and	rax,r13
	mov	QWORD[144+rsp],rax
	mov	rax,rbp
	mov	rbp,r13
	mul	QWORD[8+rsp]
	mov	rcx,rax
	mov	rbx,rdx
	mov	rax,r9
	mul	QWORD[208+rsp]
	add	rcx,rax
	mov	rax,r12
	adc	rbx,rdx
	mul	QWORD[40+rsp]
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	QWORD[104+rsp]
	add	rcx,rax
	mov	rax,r15
	mov		r15,2251799813685247
	adc	rbx,rdx
	mul	QWORD[56+rsp]
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	rdi,rcx
	shrd	rcx,rbx,51
	and	rdi,r13
	lea	rax,[rcx*8+rcx]
	mov	QWORD[232+rsp],rdi
	lea	rax,[rax*2+rcx]
	add	r10,rax
	mov	r9,r10
	shr	r10,51
	add	r11,r10
	and	r9,r13
	and	rbp,r11
	shr	r11,51
	mov	QWORD[152+rsp],r9
	lea	r14,[r8*1+r11]
	mov	QWORD[120+rsp],rbp
	mov	rcx,r9
	mov	rsi,rbp
	mov	r11,rdi
	mov	QWORD[160+rsp],r14
	mov	r13,QWORD[144+rsp]
	mov	QWORD[((-8))+rsp],20


$L$5:
	lea	rax,[r11*8+r11]
	lea	r12,[rcx*1+rcx]
	lea	rdi,[rsi*1+rsi]
	lea	rax,[rax*2+r11]
	mov	QWORD[((-120))+rsp],rdi
	lea	r8,[rax*1+rax]
	mov	QWORD[((-24))+rsp],rax
	lea	rax,[r14*8+r14]
	lea	rax,[rax*2+r14]
	lea	rbx,[rax*1+rax]
	mov	rax,rbx
	mul	r13
	mov	r9,rax
	mov	rax,rcx
	mov	r10,rdx
	mul	rcx
	mov	rcx,rax
	mov	rbx,rdx
	mov	rax,r8
	add	rcx,r9
	adc	rbx,r10
	mul	rsi
	add	rcx,rax
	mov	rax,r12
	adc	rbx,rdx
	mov	r9,rcx
	mul	r11
	mov	r10,rbx
	mov	rbp,r9
	mov	rcx,rax
	mov	rax,rdi
	mov	rbx,rdx
	mul	r13
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	lea	rax,[r13*8+r13]
	mov	QWORD[((-104))+rsp],rcx
	adc	rbx,rdx
	and	rbp,r15
	lea	rcx,[rax*2+r13]
	mov	QWORD[((-96))+rsp],rbx
	mov	rax,rcx
	mul	r13
	mov	rcx,rax
	mov	rax,rsi
	mov	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,r12
	adc	rbx,rdx
	shrd	r9,r10,51
	shr	r10,51
	add	rcx,r9
	adc	rbx,r10
	mov	QWORD[((-88))+rsp],rcx
	mul	r14
	mov	QWORD[((-80))+rsp],rbx
	mov	rbx,rcx
	and	rbx,r15
	mov	rcx,QWORD[((-88))+rsp]
	mov	QWORD[((-72))+rsp],rbx
	mov	rbx,QWORD[((-80))+rsp]
	mov	r9,rax
	mov	rax,rsi
	mov	r10,rdx
	mul	rsi
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r8
	add	rsi,r9
	adc	rdi,r10
	mul	r13
	add	rsi,rax
	mov	rax,r13
	adc	rdi,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	r8,rsi
	mul	r12
	and	r8,r15
	mov	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,QWORD[((-24))+rsp]
	adc	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mov	rdx,QWORD[((-96))+rsp]
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	rcx,rsi
	mov	r13,rsi
	shrd	rcx,rdi,51
	mov	rbx,rdi
	and	r13,r15
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	mov	r11,rax
	shrd	rax,rdx,51
	and	r11,r15
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	r14,[rax*2+rcx]
	add	r14,rbp
	mov	rcx,r14
	shr	r14,51
	add	r14,QWORD[((-72))+rsp]
	and	rcx,r15
	mov	rsi,r14
	shr	r14,51
	and	rsi,r15
	add	r14,r8
	sub	QWORD[((-8))+rsp],1
	jne	NEAR $L$5
	mov	rbx,QWORD[232+rsp]
	mov	r9,rcx
	mov	rcx,QWORD[144+rsp]
	mov	r8,r11
	mov	rdi,QWORD[120+rsp]
	mov	rbp,rsi
	mov	QWORD[((-24))+rsp],10
	lea	rax,[rbx*8+rbx]
	lea	r12,[rax*2+rbx]
	mov	rbx,QWORD[160+rsp]
	lea	rax,[rbx*8+rbx]
	lea	r11,[rax*2+rbx]
	lea	rax,[rcx*8+rcx]
	lea	r10,[rax*2+rcx]
	mov	rax,QWORD[152+rsp]
	mul	r9
	mov	rcx,rax
	mov	rax,rsi
	mov	rbx,rdx
	mul	r12
	add	rcx,rax
	lea	rax,[rdi*8+rdi]
	adc	rbx,rdx
	lea	rax,[rax*2+rdi]
	mul	r8
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	r10
	add	rcx,rax
	mov	rax,r13
	adc	rbx,rdx
	mul	r11
	mov	rsi,rax
	mov	rdi,rdx
	add	rsi,rcx
	mov	rax,rsi
	adc	rdi,rbx
	and	rax,r15
	mov	QWORD[((-120))+rsp],rax
	mov	rax,QWORD[152+rsp]
	mul	rbp
	mov	rcx,rax
	mov	rax,QWORD[120+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,r13
	adc	rbx,rdx
	mul	r10
	add	rcx,rax
	mov	rax,QWORD[152+rsp]
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	r11,rsi
	mul	r14
	and	r11,r15
	mov	rcx,rax
	mov	rax,QWORD[160+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,QWORD[120+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,r13
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,r10
	adc	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,QWORD[152+rsp]
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	r10,rsi
	mul	r13
	and	r10,r15
	mov	rcx,rax
	mov	rax,QWORD[144+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,QWORD[160+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[120+rsp]
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,r12
	adc	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,QWORD[152+rsp]
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	r12,rsi
	mul	r8
	and	r12,r15
	mov	rcx,rax
	mov	rax,QWORD[232+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,QWORD[120+rsp]
	adc	rbx,rdx
	mul	r13
	mov		r13,2251799813685247
	add	rcx,rax
	mov	rax,QWORD[144+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[160+rsp]
	adc	rbx,rdx
	mul	r14
	mov	r14,r15
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	rcx,rsi
	mov	rbp,rsi
	shrd	rcx,rdi,51
	and	rbp,r15
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[((-120))+rsp]
	mov	r9,rax
	shr	rax,51
	add	r11,rax
	and	r9,r15
	and	r14,r11
	shr	r11,51
	mov	rcx,r9
	lea	r15,[r10*1+r11]


$L$6:
	lea	rax,[rbp*8+rbp]
	lea	r8,[rcx*1+rcx]
	lea	r10,[r14*1+r14]
	lea	rax,[rax*2+rbp]
	mov	QWORD[((-120))+rsp],r10
	lea	r11,[rax*1+rax]
	mov	QWORD[((-72))+rsp],rax
	lea	rax,[r15*8+r15]
	lea	rax,[rax*2+r15]
	lea	rbx,[rax*1+rax]
	mov	rax,rbx
	mul	r12
	mov	rsi,rax
	mov	rax,rcx
	mov	rdi,rdx
	mul	rcx
	mov	rcx,rax
	mov	rbx,rdx
	mov	rax,r11
	add	rcx,rsi
	adc	rbx,rdi
	mul	r14
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	mov	rsi,rcx
	mul	rbp
	mov	rdi,rbx
	mov	rcx,rax
	mov	rax,r10
	mov	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,r15
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	lea	rax,[r12*8+r12]
	mov	QWORD[((-104))+rsp],rcx
	adc	rbx,rdx
	lea	rcx,[rax*2+r12]
	mov	QWORD[((-96))+rsp],rbx
	mov	rbx,rsi
	and	rbx,r13
	mov	rax,rcx
	mov	QWORD[((-88))+rsp],rbx
	mul	r12
	mov	rcx,rax
	mov	rax,r14
	mov	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	rdi,rcx
	mul	r15
	and	rdi,r13
	mov	r10,rdi
	mov	rsi,rax
	mov	rax,r14
	mov	rdi,rdx
	mul	r14
	add	rsi,rax
	mov	rax,r11
	adc	rdi,rdx
	mul	r12
	add	rsi,rax
	mov	rax,r12
	adc	rdi,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	r9,rsi
	mul	r8
	and	r9,r13
	mov	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,QWORD[((-72))+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mov	rdx,QWORD[((-96))+rsp]
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	r12,rcx
	shrd	rcx,rbx,51
	and	r12,r13
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	mov	rbp,rax
	shrd	rax,rdx,51
	and	rbp,r13
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	r15,[rax*2+rcx]
	add	r15,QWORD[((-88))+rsp]
	mov	rcx,r15
	shr	r15,51
	add	r15,r10
	and	rcx,r13
	mov	r14,r15
	shr	r15,51
	and	r14,r13
	add	r15,r9
	sub	QWORD[((-24))+rsp],1
	jne	NEAR $L$6
	mov	r11,QWORD[8+rsp]
	mov	r10,QWORD[88+rsp]
	mov	r9,rcx
	mov	QWORD[((-24))+rsp],50
	mov	rax,r11
	mul	rcx
	mov	rcx,rax
	mov	rax,r10
	mov	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,QWORD[248+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[200+rsp]
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,QWORD[240+rsp]
	adc	rbx,rdx
	mul	r12
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r11
	add	rsi,rcx
	adc	rdi,rbx
	mov	r8,rsi
	mul	r14
	and	r8,r13
	mov	rcx,rax
	mov	rax,QWORD[40+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,r10
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,QWORD[240+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[200+rsp]
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	mov	rax,rsi
	adc	rdi,rbx
	and	rax,r13
	mov	r10,rax
	mov	rax,r11
	mul	r15
	mov	rcx,rax
	mov	rax,QWORD[56+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,QWORD[40+rsp]
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,QWORD[88+rsp]
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,QWORD[200+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	mov	rax,rsi
	adc	rdi,rbx
	and	rax,r13
	mov	r11,rax
	mov	rax,QWORD[8+rsp]
	mul	r12
	mov	rcx,rax
	mov	rax,QWORD[104+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,QWORD[56+rsp]
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,QWORD[40+rsp]
	adc	rbx,rdx
	mul	r15
	add	rcx,rax
	mov	rax,QWORD[88+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	mov	rax,rsi
	adc	rdi,rbx
	and	rax,r13
	mov	QWORD[88+rsp],rax
	mov	rax,QWORD[8+rsp]
	mul	rbp
	mov	rbp,r13
	mov	rcx,rax
	mov	rax,QWORD[208+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,QWORD[40+rsp]
	adc	rbx,rdx
	mul	r12
	mov	r12,QWORD[88+rsp]
	add	rcx,rax
	mov	rax,QWORD[104+rsp]
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,QWORD[56+rsp]
	adc	rbx,rdx
	mul	r15
	mov		r15,2251799813685247
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	rdi,rcx
	shrd	rcx,rbx,51
	and	rdi,r13
	lea	rax,[rcx*8+rcx]
	mov	QWORD[160+rsp],rdi
	lea	rax,[rax*2+rcx]
	add	r8,rax
	mov	rcx,r8
	shr	r8,51
	add	r10,r8
	and	rcx,r13
	and	rbp,r10
	shr	r10,51
	mov	QWORD[40+rsp],rcx
	lea	r14,[r11*1+r10]
	mov	QWORD[8+rsp],rbp
	mov	r11,rdi
	mov	rsi,rbp
	mov	QWORD[((-8))+rsp],r14


$L$7:
	lea	rax,[r11*8+r11]
	lea	rbp,[rcx*1+rcx]
	lea	rdi,[rsi*1+rsi]
	lea	r13,[rax*2+r11]
	lea	rax,[r14*8+r14]
	mov	QWORD[((-120))+rsp],rdi
	lea	r9,[rax*2+r14]
	lea	r8,[r13*1+r13]
	add	r9,r9
	mov	rax,r9
	mul	r12
	mov	r9,rax
	mov	rax,rcx
	mov	r10,rdx
	mul	rcx
	add	r9,rax
	mov	rax,r8
	adc	r10,rdx
	mul	rsi
	add	r9,rax
	mov	rax,rbp
	adc	r10,rdx
	mul	r11
	mov	rcx,rax
	mov	rax,rdi
	mov	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	lea	rax,[r12*8+r12]
	mov	QWORD[((-104))+rsp],rcx
	adc	rbx,rdx
	lea	rcx,[rax*2+r12]
	mov	QWORD[((-96))+rsp],rbx
	mov	rbx,r9
	and	rbx,r15
	mov	rax,rcx
	mov	QWORD[((-88))+rsp],rbx
	mul	r12
	mov	rcx,rax
	mov	rax,rsi
	mov	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,rbp
	adc	rbx,rdx
	shrd	r9,r10,51
	shr	r10,51
	add	rcx,r9
	mov	rdx,rcx
	adc	rbx,r10
	and	rdx,r15
	mov	QWORD[((-72))+rsp],rdx
	mul	r14
	mov	r9,rax
	mov	rax,rsi
	mov	r10,rdx
	mul	rsi
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r8
	add	rsi,r9
	adc	rdi,r10
	mul	r12
	add	rsi,rax
	mov	rax,r12
	adc	rdi,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	r8,rsi
	mul	rbp
	and	r8,r15
	mov	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	mul	r13
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mov	rdx,QWORD[((-96))+rsp]
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	r12,rcx
	shrd	rcx,rbx,51
	and	r12,r15
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	mov	r11,rax
	shrd	rax,rdx,51
	and	r11,r15
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	r14,[rax*2+rcx]
	add	r14,QWORD[((-88))+rsp]
	mov	rcx,r14
	shr	r14,51
	add	r14,QWORD[((-72))+rsp]
	and	rcx,r15
	mov	rsi,r14
	shr	r14,51
	and	rsi,r15
	add	r14,r8
	sub	QWORD[((-24))+rsp],1
	jne	NEAR $L$7
	mov	rbx,QWORD[160+rsp]
	mov	rdi,QWORD[((-8))+rsp]
	mov	rbp,rsi
	mov	rsi,QWORD[88+rsp]
	mov	r10,QWORD[40+rsp]
	lea	rax,[rbx*8+rbx]
	lea	r13,[rax*2+rbx]
	mov	rbx,QWORD[8+rsp]
	mov	QWORD[152+rsp],r13
	lea	rax,[rbx*8+rbx]
	lea	rax,[rax*2+rbx]
	mov	QWORD[240+rsp],rax
	lea	rax,[rdi*8+rdi]
	lea	r8,[rax*2+rdi]
	lea	rax,[rsi*8+rsi]
	lea	r9,[rax*2+rsi]
	mov	rax,r10
	mov	QWORD[232+rsp],r8
	mul	rcx
	mov	QWORD[200+rsp],r9
	mov	rsi,rax
	mov	rax,r13
	mov	rdi,rdx
	mul	rbp
	add	rsi,rax
	mov	rax,QWORD[240+rsp]
	adc	rdi,rdx
	mul	r11
	add	rsi,rax
	mov	rax,r9
	adc	rdi,rdx
	mul	r14
	add	rsi,rax
	mov	rax,r8
	adc	rdi,rdx
	mul	r12
	add	rsi,rax
	mov	rax,rsi
	adc	rdi,rdx
	mov	QWORD[((-120))+rsp],rsi
	and	rax,r15
	mov	QWORD[((-112))+rsp],rdi
	mov	r8,rax
	mov	rax,r10
	mov	r10,QWORD[((-112))+rsp]
	mul	rbp
	mov	rsi,rax
	mov	rax,rbx
	mov	rdi,rdx
	mul	rcx
	add	rsi,rax
	mov	rax,r13
	adc	rdi,rdx
	mul	r14
	add	rsi,rax
	mov	rax,QWORD[232+rsp]
	adc	rdi,rdx
	mul	r11
	add	rsi,rax
	mov	rax,r9
	mov	r9,QWORD[((-120))+rsp]
	adc	rdi,rdx
	mul	r12
	add	rsi,rax
	adc	rdi,rdx
	shrd	r9,r10,51
	shr	r10,51
	add	r9,rsi
	mov	rax,r9
	adc	r10,rdi
	and	rax,r15
	mov	QWORD[((-120))+rsp],rax
	mov	rax,QWORD[40+rsp]
	mul	r14
	mov	rsi,rax
	mov	rax,QWORD[((-8))+rsp]
	mov	rdi,rdx
	mul	rcx
	add	rsi,rax
	mov	rax,rbx
	adc	rdi,rdx
	mul	rbp
	add	rsi,rax
	mov	rax,r13
	adc	rdi,rdx
	mul	r12
	add	rsi,rax
	mov	rax,QWORD[200+rsp]
	adc	rdi,rdx
	mul	r11
	add	rsi,rax
	mov	rax,QWORD[40+rsp]
	adc	rdi,rdx
	shrd	r9,r10,51
	shr	r10,51
	add	r9,rsi
	mov	rdx,r9
	adc	r10,rdi
	and	rdx,r15
	mov	r13,rdx
	mul	r12
	mov	rsi,rax
	mov	rax,QWORD[88+rsp]
	mov	rdi,rdx
	mul	rcx
	add	rsi,rax
	mov	rax,QWORD[((-8))+rsp]
	adc	rdi,rdx
	mul	rbp
	add	rsi,rax
	mov	rax,rbx
	adc	rdi,rdx
	mul	r14
	add	rsi,rax
	mov	rax,QWORD[152+rsp]
	adc	rdi,rdx
	mul	r11
	add	rax,rsi
	mov	rsi,r9
	adc	rdx,rdi
	mov	rdi,r10
	shrd	rsi,r10,51
	shr	rdi,51
	add	rsi,rax
	mov	rax,rsi
	adc	rdi,rdx
	and	rax,r15
	mov	QWORD[56+rsp],rax
	mov	rax,r11
	mul	QWORD[40+rsp]
	mov	r9,rax
	mov	r10,rdx
	mov	rax,rcx
	mul	QWORD[160+rsp]
	mov	rcx,rax
	mov	rbx,rdx
	mov	rax,r12
	add	rcx,r9
	adc	rbx,r10
	mul	QWORD[8+rsp]
	add	rcx,rax
	mov	rax,rbp
	adc	rbx,rdx
	mul	QWORD[88+rsp]
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	QWORD[((-8))+rsp]
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	rdi,rcx
	shrd	rcx,rbx,51
	and	rdi,r15
	lea	rax,[rcx*8+rcx]
	mov	QWORD[208+rsp],rdi
	lea	rax,[rax*2+rcx]
	add	r8,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rsi,r8
	shr	r8,51
	and	rsi,r15
	lea	r11,[rax*1+r8]
	mov	QWORD[104+rsp],rsi
	mov	rcx,rsi
	and	r15,r11
	shr	r11,51
	mov	QWORD[120+rsp],r15
	lea	r14,[r13*1+r11]
	mov	r12,QWORD[56+rsp]
	mov	rbp,r15
	mov	QWORD[((-24))+rsp],100
	mov		r15,2251799813685247
	mov	rsi,rbp
	mov	QWORD[144+rsp],r14
	mov	rbp,rdi


$L$8:
	lea	rax,[rbp*8+rbp]
	lea	r11,[rcx*1+rcx]
	lea	rdi,[rsi*1+rsi]
	lea	r13,[rax*2+rbp]
	lea	rax,[r14*8+r14]
	mov	QWORD[((-120))+rsp],rdi
	lea	r9,[rax*2+r14]
	lea	r8,[r13*1+r13]
	add	r9,r9
	mov	rax,r9
	mul	r12
	mov	r9,rax
	mov	rax,rcx
	mov	r10,rdx
	mul	rcx
	add	r9,rax
	mov	rax,r8
	adc	r10,rdx
	mul	rsi
	add	r9,rax
	mov	rax,r11
	adc	r10,rdx
	mul	rbp
	mov	rcx,rax
	mov	rax,rdi
	mov	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	lea	rax,[r12*8+r12]
	mov	QWORD[((-104))+rsp],rcx
	adc	rbx,rdx
	lea	rcx,[rax*2+r12]
	mov	QWORD[((-96))+rsp],rbx
	mov	rbx,r9
	and	rbx,r15
	mov	rax,rcx
	mov	QWORD[((-88))+rsp],rbx
	mul	r12
	mov	rcx,rax
	mov	rax,rsi
	mov	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	shrd	r9,r10,51
	shr	r10,51
	add	rcx,r9
	mov	rdx,rcx
	adc	rbx,r10
	and	rdx,r15
	mov	QWORD[((-72))+rsp],rdx
	mul	r14
	mov	r9,rax
	mov	rax,rsi
	mov	r10,rdx
	mul	rsi
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r8
	add	rsi,r9
	adc	rdi,r10
	mul	r12
	add	rsi,rax
	mov	rax,r12
	adc	rdi,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	r9,rsi
	mul	r11
	and	r9,r15
	mov	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,rbp
	adc	rbx,rdx
	mul	r13
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mov	rdx,QWORD[((-96))+rsp]
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	r12,rcx
	shrd	rcx,rbx,51
	and	r12,r15
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	mov	rbp,rax
	shrd	rax,rdx,51
	and	rbp,r15
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	r14,[rax*2+rcx]
	add	r14,QWORD[((-88))+rsp]
	mov	rcx,r14
	shr	r14,51
	add	r14,QWORD[((-72))+rsp]
	and	rcx,r15
	mov	rsi,r14
	shr	r14,51
	and	rsi,r15
	add	r14,r9
	sub	QWORD[((-24))+rsp],1
	jne	NEAR $L$8
	mov	rbx,QWORD[208+rsp]
	mov	r11,rbp
	mov	rbp,rsi
	mov	rsi,rcx
	mov	rcx,QWORD[56+rsp]
	mov	r9,QWORD[104+rsp]
	mov	r10,QWORD[120+rsp]
	mov	QWORD[((-24))+rsp],50
	lea	rax,[rbx*8+rbx]
	lea	rdi,[rax*2+rbx]
	mov	rbx,QWORD[144+rsp]
	lea	rax,[rbx*8+rbx]
	lea	r13,[rax*2+rbx]
	lea	rax,[rcx*8+rcx]
	lea	r8,[rax*2+rcx]
	mov	rax,r9
	mul	rsi
	mov	rcx,rax
	mov	rax,rbp
	mov	rbx,rdx
	mul	rdi
	add	rcx,rax
	lea	rax,[r10*8+r10]
	adc	rbx,rdx
	lea	rax,[rax*2+r10]
	mul	r11
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,r12
	adc	rbx,rdx
	mul	r13
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov	QWORD[((-120))+rsp],rcx
	and	rax,r15
	mov	QWORD[((-112))+rsp],rbx
	mov	QWORD[((-104))+rsp],rax
	mov	rax,r9
	mov	r9,QWORD[((-120))+rsp]
	mul	rbp
	mov	rcx,rax
	mov	rax,r10
	mov	rbx,rdx
	mul	rsi
	mov	r10,QWORD[((-112))+rsp]
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,r13
	mov	r13,QWORD[120+rsp]
	adc	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,r12
	adc	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,QWORD[104+rsp]
	adc	rbx,rdx
	shrd	r9,r10,51
	shr	r10,51
	add	r9,rcx
	mov	rdx,r9
	adc	r10,rbx
	and	rdx,r15
	mov	QWORD[((-120))+rsp],rdx
	mul	r14
	mov	rcx,rax
	mov	rax,QWORD[144+rsp]
	mov	rbx,rdx
	mul	rsi
	add	rcx,rax
	mov	rax,r13
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,r12
	adc	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,QWORD[104+rsp]
	adc	rbx,rdx
	shrd	r9,r10,51
	shr	r10,51
	add	r9,rcx
	adc	r10,rbx
	mov	r8,r9
	mul	r12
	and	r8,r15
	mov	rcx,rax
	mov	rax,QWORD[56+rsp]
	mov	rbx,rdx
	mul	rsi
	add	rcx,rax
	mov	rax,QWORD[144+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,r13
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,rdi
	adc	rbx,rdx
	mul	r11
	add	rax,rcx
	mov	rcx,r9
	adc	rdx,rbx
	mov	rbx,r10
	shrd	rcx,r10,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,QWORD[104+rsp]
	adc	rbx,rdx
	mov	rdi,rcx
	and	rdi,r15
	mul	r11
	mov	r13,rdi
	mov	r9,rax
	mov	rax,QWORD[208+rsp]
	mov	r10,rdx
	mul	rsi
	mov	rsi,rax
	mov	rax,QWORD[120+rsp]
	mov	rdi,rdx
	add	rsi,r9
	adc	rdi,r10
	mul	r12
	add	rsi,rax
	mov	rax,QWORD[56+rsp]
	adc	rdi,rdx
	mul	rbp
	add	rsi,rax
	mov	rax,QWORD[144+rsp]
	adc	rdi,rdx
	mul	r14
	add	rsi,rax
	adc	rdi,rdx
	mov	rdx,QWORD[((-120))+rsp]
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	r12,rcx
	shrd	rcx,rbx,51
	mov	rbx,QWORD[((-104))+rsp]
	and	r12,r15
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	lea	rbp,[rbx*1+rax]
	mov	r9,rbp
	shr	rbp,51
	lea	r11,[rbp*1+rdx]
	and	r9,r15
	mov	rcx,r9
	and	r15,r11
	shr	r11,51
	mov	rbp,r15
	lea	r14,[r8*1+r11]
	mov		r15,2251799813685247
	mov	rsi,rbp


$L$9:
	lea	rax,[r12*8+r12]
	lea	r11,[rcx*1+rcx]
	lea	rdi,[rsi*1+rsi]
	lea	rbp,[rax*2+r12]
	lea	rax,[r14*8+r14]
	mov	QWORD[((-120))+rsp],rdi
	lea	r9,[rax*2+r14]
	lea	r8,[rbp*1+rbp]
	add	r9,r9
	mov	rax,r9
	mul	r13
	mov	r9,rax
	mov	rax,rcx
	mov	r10,rdx
	mul	rcx
	add	r9,rax
	mov	rax,r8
	adc	r10,rdx
	mul	rsi
	add	r9,rax
	mov	rax,r11
	adc	r10,rdx
	mul	r12
	mov	rcx,rax
	mov	rax,rdi
	mov	rbx,rdx
	mul	r13
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	lea	rax,[r13*8+r13]
	mov	QWORD[((-104))+rsp],rcx
	adc	rbx,rdx
	lea	rcx,[rax*2+r13]
	mov	QWORD[((-96))+rsp],rbx
	mov	rbx,r9
	and	rbx,r15
	mov	rax,rcx
	mov	QWORD[((-88))+rsp],rbx
	mul	r13
	mov	rcx,rax
	mov	rax,rsi
	mov	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,r8
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	shrd	r9,r10,51
	shr	r10,51
	add	rcx,r9
	mov	rdx,rcx
	adc	rbx,r10
	and	rdx,r15
	mov	QWORD[((-72))+rsp],rdx
	mul	r14
	mov	r9,rax
	mov	rax,rsi
	mov	r10,rdx
	mul	rsi
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r8
	add	rsi,r9
	adc	rdi,r10
	mul	r13
	add	rsi,rax
	mov	rax,r13
	adc	rdi,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	r8,rsi
	mul	r11
	and	r8,r15
	mov	rcx,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,r12
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	rbx,rdx
	mov	rdx,QWORD[((-96))+rsp]
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	r13,rcx
	shrd	rcx,rbx,51
	and	r13,r15
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	mov	r12,rax
	shrd	rax,rdx,51
	and	r12,r15
	mov	rcx,rax
	lea	rax,[rax*8+rax]
	lea	r14,[rax*2+rcx]
	add	r14,QWORD[((-88))+rsp]
	mov	rcx,r14
	shr	r14,51
	add	r14,QWORD[((-72))+rsp]
	and	rcx,r15
	mov	rsi,r14
	shr	r14,51
	and	rsi,r15
	add	r14,r8
	sub	QWORD[((-24))+rsp],1
	jne	NEAR $L$9
	mov	r11,QWORD[40+rsp]
	mov	r10,QWORD[152+rsp]
	mov	r9,rcx
	mov	rbp,rsi
	mov	rax,r11
	mul	rcx
	mov	rcx,rax
	mov	rax,r10
	mov	rbx,rdx
	mul	rsi
	add	rcx,rax
	mov	rax,QWORD[240+rsp]
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,QWORD[200+rsp]
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,QWORD[232+rsp]
	adc	rbx,rdx
	mul	r13
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r11
	add	rsi,rcx
	adc	rdi,rbx
	mov	r8,rsi
	mul	rbp
	and	r8,r15
	mov	rcx,rax
	mov	rax,QWORD[8+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,r10
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,QWORD[232+rsp]
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,QWORD[200+rsp]
	adc	rbx,rdx
	mul	r13
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	mov	rax,rsi
	adc	rdi,rbx
	and	rax,r15
	mov	r10,rax
	mov	rax,r11
	mul	r14
	mov	rcx,rax
	mov	rax,QWORD[((-8))+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,QWORD[8+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[152+rsp]
	adc	rbx,rdx
	mul	r13
	add	rcx,rax
	mov	rax,QWORD[200+rsp]
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	mov	rax,rsi
	adc	rdi,rbx
	and	rax,r15
	mov	QWORD[((-120))+rsp],rax
	mov	rax,r11
	mul	r13
	mov	rcx,rax
	mov	rax,QWORD[88+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,QWORD[((-8))+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[8+rsp]
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,QWORD[152+rsp]
	adc	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	rsi,rcx
	mul	r12
	and	rsi,r15
	mov	r11,rax
	mov	rax,QWORD[160+rsp]
	mov	r12,rdx
	mul	r9
	add	r11,rax
	mov	rax,QWORD[8+rsp]
	adc	r12,rdx
	mul	r13
	add	r11,rax
	mov	rax,QWORD[88+rsp]
	adc	r12,rdx
	mul	rbp
	add	r11,rax
	mov	rax,QWORD[((-8))+rsp]
	adc	r12,rdx
	mul	r14
	add	rax,r11
	adc	rdx,r12
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	adc	rbx,rdx
	mov	r9,rcx
	shrd	rcx,rbx,51
	and	r9,r15
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	r8,rax
	mov	rax,QWORD[((-120))+rsp]
	mov	rcx,r8
	shr	r8,51
	add	r10,r8
	and	rcx,r15
	mov	r8,r10
	shr	r10,51
	lea	rdi,[rax*1+r10]
	lea	rax,[r9*8+r9]
	and	r8,r15
	lea	r10,[rcx*1+rcx]
	lea	r14,[r8*1+r8]
	lea	r13,[rax*2+r9]
	mov	rax,rcx
	mul	rcx
	lea	rbp,[r13*1+r13]
	mov	rcx,rax
	mov	rax,rbp
	mov	rbx,rdx
	mul	r8
	add	rcx,rax
	lea	rax,[rdi*8+rdi]
	adc	rbx,rdx
	lea	rax,[rax*2+rdi]
	add	rax,rax
	mul	rsi
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov	r11,rcx
	and	rax,r15
	mov	r12,rbx
	mov	QWORD[((-120))+rsp],rax
	lea	rax,[rsi*8+rsi]
	lea	rcx,[rax*2+rsi]
	mov	rax,rcx
	mul	rsi
	mov	rcx,rax
	mov	rax,r8
	mov	rbx,rdx
	mul	r10
	add	rcx,rax
	mov	rax,rbp
	adc	rbx,rdx
	mul	rdi
	add	rax,rcx
	mov	rcx,r11
	adc	rdx,rbx
	mov	rbx,r12
	shrd	rcx,r12,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rbp
	adc	rbx,rdx
	mov	QWORD[((-104))+rsp],rcx
	and	rcx,r15
	mul	rsi
	mov	QWORD[((-88))+rsp],rcx
	mov	QWORD[((-96))+rsp],rbx
	mov	rcx,QWORD[((-104))+rsp]
	mov	rbx,QWORD[((-96))+rsp]
	mov	r11,rax
	mov	rax,r8
	mov	r12,rdx
	mul	r8
	add	r11,rax
	mov	rax,r10
	adc	r12,rdx
	mul	rdi
	add	rax,r11
	adc	rdx,r12
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mov	rbp,rcx
	mul	r10
	and	rbp,r15
	mov	r11,rax
	mov	rax,r13
	mov	r12,rdx
	mul	r9
	add	r11,rax
	mov	rax,r14
	adc	r12,rdx
	mul	rdi
	add	rax,r11
	adc	rdx,r12
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mov	r8,rcx
	mul	r14
	and	r8,r15
	mov	r11,rax
	mov	rax,rdi
	mov	r12,rdx
	mul	rdi
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r9
	add	rsi,r11
	adc	rdi,r12
	mul	r10
	add	rsi,rax
	adc	rdi,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	rcx,rsi
	mov	r9,rsi
	shrd	rcx,rdi,51
	and	r9,r15
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[((-120))+rsp]
	mov	r11,rax
	shr	rax,51
	add	rax,QWORD[((-88))+rsp]
	and	r11,r15
	lea	r10,[r11*1+r11]
	mov	rdi,rax
	shr	rax,51
	lea	rsi,[rbp*1+rax]
	lea	rax,[r9*8+r9]
	and	rdi,r15
	lea	r14,[rdi*1+rdi]
	lea	r13,[rax*2+r9]
	mov	rax,rdi
	lea	rbp,[r13*1+r13]
	mul	rbp
	mov	rcx,rax
	mov	rax,r11
	mov	rbx,rdx
	mul	r11
	add	rcx,rax
	lea	rax,[rsi*8+rsi]
	adc	rbx,rdx
	lea	rax,[rax*2+rsi]
	add	rax,rax
	mul	r8
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov	r11,rcx
	and	rax,r15
	mov	r12,rbx
	mov	QWORD[((-88))+rsp],rax
	lea	rax,[r8*8+r8]
	lea	rcx,[rax*2+r8]
	mov	rax,rcx
	mul	r8
	mov	rcx,rax
	mov	rax,r10
	mov	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mul	rbp
	add	rax,rcx
	mov	rcx,r11
	adc	rdx,rbx
	mov	rbx,r12
	shrd	rcx,r12,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rbp
	adc	rbx,rdx
	mov	QWORD[((-104))+rsp],rcx
	and	rcx,r15
	mul	r8
	mov	QWORD[((-96))+rsp],rbx
	mov	QWORD[((-120))+rsp],rcx
	mov	rbx,QWORD[((-96))+rsp]
	mov	rcx,QWORD[((-104))+rsp]
	mov	r11,rax
	mov	rax,rdi
	mov	r12,rdx
	mul	rdi
	add	r11,rax
	mov	rax,rsi
	adc	r12,rdx
	mul	r10
	add	rax,r11
	adc	rdx,r12
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	mov	r11,rax
	mov	rbp,rax
	mov	rax,r13
	mov	r12,rdx
	and	rbp,r15
	mul	r9
	mov	rcx,rax
	mov	rax,r10
	mov	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	rsi
	add	rax,rcx
	mov	rcx,r11
	adc	rdx,rbx
	mov	rbx,r12
	shrd	rcx,r12,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mov	rdi,rcx
	mul	rsi
	and	rdi,r15
	mov	r11,rax
	mov	rax,r14
	mov	r12,rdx
	mul	r8
	add	r11,rax
	mov	rax,r9
	adc	r12,rdx
	mul	r10
	add	rax,r11
	adc	rdx,r12
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	adc	rbx,rdx
	mov	r9,rcx
	shrd	rcx,rbx,51
	and	r9,r15
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[((-88))+rsp]
	mov	r11,rax
	shr	rax,51
	add	rax,QWORD[((-120))+rsp]
	and	r11,r15
	lea	r10,[r11*1+r11]
	mov	r8,rax
	shr	rax,51
	lea	rsi,[rbp*1+rax]
	lea	rax,[r9*8+r9]
	and	r8,r15
	lea	r14,[r8*1+r8]
	lea	r13,[rax*2+r9]
	mov	rax,r8
	lea	rbp,[r13*1+r13]
	mul	rbp
	mov	rcx,rax
	mov	rax,r11
	mov	rbx,rdx
	mul	r11
	add	rcx,rax
	lea	rax,[rsi*8+rsi]
	adc	rbx,rdx
	lea	rax,[rax*2+rsi]
	add	rax,rax
	mul	rdi
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov	r11,rcx
	and	rax,r15
	mov	r12,rbx
	mov	QWORD[((-88))+rsp],rax
	lea	rax,[rdi*8+rdi]
	lea	rcx,[rax*2+rdi]
	mov	rax,rcx
	mul	rdi
	mov	rcx,rax
	mov	rax,r10
	mov	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mul	rbp
	add	rax,rcx
	mov	rcx,r11
	adc	rdx,rbx
	mov	rbx,r12
	shrd	rcx,r12,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rbp
	adc	rbx,rdx
	mov	QWORD[((-104))+rsp],rcx
	and	rcx,r15
	mul	rdi
	mov	QWORD[((-120))+rsp],rcx
	mov	QWORD[((-96))+rsp],rbx
	mov	rcx,QWORD[((-104))+rsp]
	mov	rbx,QWORD[((-96))+rsp]
	mov	r11,rax
	mov	rax,r8
	mov	r12,rdx
	mul	r8
	add	r11,rax
	mov	rax,rsi
	adc	r12,rdx
	mul	r10
	add	r11,rax
	mov	rax,r13
	adc	r12,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	r11,rcx
	adc	r12,rbx
	mov	rbp,r11
	mul	r9
	and	rbp,r15
	mov	rcx,rax
	mov	rax,r10
	mov	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	rsi
	add	rax,rcx
	mov	rcx,r11
	adc	rdx,rbx
	mov	rbx,r12
	shrd	rcx,r12,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mov	r8,rcx
	mul	rsi
	and	r8,r15
	mov	r11,rax
	mov	rax,r14
	mov	r12,rdx
	mul	rdi
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r9
	add	rsi,r11
	adc	rdi,r12
	mul	r10
	add	rsi,rax
	adc	rdi,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	rcx,rsi
	mov	r9,rsi
	shrd	rcx,rdi,51
	and	r9,r15
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[((-88))+rsp]
	mov	r11,rax
	shr	rax,51
	add	rax,QWORD[((-120))+rsp]
	and	r11,r15
	lea	r10,[r11*1+r11]
	mov	rdi,rax
	shr	rax,51
	lea	rsi,[rbp*1+rax]
	lea	rax,[r9*8+r9]
	and	rdi,r15
	lea	r14,[rdi*1+rdi]
	lea	r13,[rax*2+r9]
	mov	rax,rdi
	lea	rbp,[r13*1+r13]
	mul	rbp
	mov	rcx,rax
	mov	rax,r11
	mov	rbx,rdx
	mul	r11
	add	rcx,rax
	lea	rax,[rsi*8+rsi]
	adc	rbx,rdx
	lea	rax,[rax*2+rsi]
	add	rax,rax
	mul	r8
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov	r11,rcx
	and	rax,r15
	mov	r12,rbx
	mov	QWORD[((-88))+rsp],rax
	lea	rax,[r8*8+r8]
	lea	rcx,[rax*2+r8]
	mov	rax,rcx
	mul	r8
	mov	rcx,rax
	mov	rax,r10
	mov	rbx,rdx
	mul	rdi
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mul	rbp
	add	rax,rcx
	mov	rcx,r11
	adc	rdx,rbx
	mov	rbx,r12
	shrd	rcx,r12,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rbp
	adc	rbx,rdx
	mov	QWORD[((-104))+rsp],rcx
	and	rcx,r15
	mul	r8
	mov	QWORD[((-120))+rsp],rcx
	mov	QWORD[((-96))+rsp],rbx
	mov	rcx,QWORD[((-104))+rsp]
	mov	rbx,QWORD[((-96))+rsp]
	mov	r11,rax
	mov	rax,rdi
	mov	r12,rdx
	mul	rdi
	add	r11,rax
	mov	rax,rsi
	adc	r12,rdx
	mul	r10
	add	rax,r11
	adc	rdx,r12
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rax,rcx
	adc	rdx,rbx
	mov	r11,rax
	mov	rbp,rax
	mov	rax,r13
	mov	r12,rdx
	and	rbp,r15
	mul	r9
	mov	rcx,rax
	mov	rax,r10
	mov	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	rsi
	add	rax,rcx
	mov	rcx,r11
	adc	rdx,rbx
	mov	rbx,r12
	shrd	rcx,r12,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rsi
	adc	rbx,rdx
	mov	rdi,rcx
	mul	rsi
	and	rdi,r15
	mov	r11,rax
	mov	rax,r14
	mov	r12,rdx
	mul	r8
	add	r11,rax
	mov	rax,r9
	adc	r12,rdx
	mul	r10
	add	rax,r11
	adc	rdx,r12
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	adc	rbx,rdx
	mov	r8,rcx
	shrd	rcx,rbx,51
	and	r8,r15
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[((-88))+rsp]
	mov	rcx,rax
	shr	rax,51
	add	rax,QWORD[((-120))+rsp]
	and	rcx,r15
	mov	r11,rax
	shr	rax,51
	and	r11,r15
	lea	rsi,[rbp*1+rax]
	lea	rax,[r8*8+r8]
	lea	r14,[r11*1+r11]
	lea	rbp,[rcx*1+rcx]
	mov	QWORD[((-120))+rsp],r14
	lea	r14,[rax*2+r8]
	mov	rax,rcx
	mul	rcx
	lea	r13,[r14*1+r14]
	mov	rcx,rax
	mov	rax,r13
	mov	rbx,rdx
	mul	r11
	add	rcx,rax
	lea	rax,[rsi*8+rsi]
	adc	rbx,rdx
	lea	rax,[rax*2+rsi]
	add	rax,rax
	mul	rdi
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov	r9,rcx
	and	rax,r15
	mov	r10,rbx
	mov	QWORD[((-104))+rsp],rax
	lea	rax,[rdi*8+rdi]
	lea	rcx,[rax*2+rdi]
	mov	rax,rcx
	mul	rdi
	mov	rcx,rax
	mov	rax,r11
	mov	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,r13
	adc	rbx,rdx
	mul	rsi
	add	rax,rcx
	mov	rcx,r9
	adc	rdx,rbx
	mov	rbx,r10
	shrd	rcx,r10,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,r11
	adc	rbx,rdx
	mov	r9,rcx
	and	rcx,r15
	mul	r11
	mov	QWORD[((-88))+rsp],rcx
	mov	rcx,r9
	mov	r11,rax
	mov	rax,r13
	mov	r12,rdx
	mul	rdi
	add	r11,rax
	mov	rax,rbp
	adc	r12,rdx
	mul	rsi
	add	rax,r11
	adc	rdx,r12
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,rdi
	adc	rbx,rdx
	mov	r13,rcx
	mul	rbp
	and	r13,r15
	mov	r9,rax
	mov	rax,r14
	mov	r10,rdx
	mul	r8
	mov	r14,QWORD[((-120))+rsp]
	add	r9,rax
	mov	rax,r14
	adc	r10,rdx
	mul	rsi
	add	rax,r9
	adc	rdx,r10
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,r14
	mov	r14,QWORD[136+rsp]
	adc	rbx,rdx
	mov	r9,rcx
	mul	rdi
	and	r9,r15
	mov	r11,rax
	mov	rax,rsi
	mov	r12,rdx
	mul	rsi
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,rbp
	add	rsi,r11
	adc	rdi,r12
	mul	r8
	add	rsi,rax
	adc	rdi,rdx
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rsi
	adc	rbx,rdi
	mov	r8,rcx
	shrd	rcx,rbx,51
	and	r8,r15
	lea	rax,[rcx*8+rcx]
	lea	rax,[rax*2+rcx]
	add	rax,QWORD[((-104))+rsp]
	mov	r10,rax
	shr	rax,51
	add	rax,QWORD[((-88))+rsp]
	and	r10,r15
	mov	r11,rax
	shr	rax,51
	lea	rbp,[r13*1+rax]
	mov	r13,QWORD[80+rsp]
	and	r11,r15
	lea	rax,[r13*8+r13]
	lea	r12,[rax*2+r13]
	lea	rax,[r14*8+r14]
	lea	rbx,[rax*2+r14]
	mov	rax,rbx
	mul	r8
	mov	rcx,rax
	mov	rax,r9
	mov	rbx,rdx
	mul	r12
	add	rcx,rax
	mov	rax,QWORD[128+rsp]
	adc	rbx,rdx
	mul	r10
	add	rcx,rax
	mov	rax,QWORD[192+rsp]
	adc	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,QWORD[216+rsp]
	adc	rbx,rdx
	mul	rbp
	mov	rsi,rax
	mov	rdi,rdx
	add	rsi,rcx
	mov	rax,rsi
	adc	rdi,rbx
	and	rax,r15
	mov	QWORD[((-120))+rsp],rax
	mov	rax,r12
	mul	r8
	mov	rcx,rax
	mov	rax,QWORD[216+rsp]
	mov	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	r10
	add	rcx,rax
	mov	rax,QWORD[128+rsp]
	adc	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,QWORD[192+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[192+rsp]
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	r12,rsi
	mul	r9
	and	r12,r15
	mov	rcx,rax
	mov	rax,QWORD[216+rsp]
	mov	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,r13
	adc	rbx,rdx
	mul	r10
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,QWORD[128+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[128+rsp]
	adc	rbx,rdx
	shrd	rsi,rdi,51
	shr	rdi,51
	add	rsi,rcx
	adc	rdi,rbx
	mov	rcx,rsi
	mul	r9
	and	rcx,r15
	mov	QWORD[((-104))+rsp],rcx
	mov	rcx,rax
	mov	rax,QWORD[192+rsp]
	mov	rbx,rdx
	mul	r8
	add	rcx,rax
	mov	rax,QWORD[24+rsp]
	adc	rbx,rdx
	mul	r10
	add	rcx,rax
	mov	rax,r13
	adc	rbx,rdx
	mul	r11
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	rbp
	add	rax,rcx
	mov	rcx,rsi
	adc	rdx,rbx
	mov	rbx,rdi
	shrd	rcx,rdi,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,QWORD[128+rsp]
	adc	rbx,rdx
	mov	rsi,rcx
	and	rsi,r15
	mul	r8
	mov	r13,rax
	mov	rax,QWORD[136+rsp]
	mov	r14,rdx
	mul	r9
	add	r13,rax
	mov	rax,QWORD[224+rsp]
	adc	r14,rdx
	mul	r10
	add	r13,rax
	mov	rax,QWORD[24+rsp]
	adc	r14,rdx
	mul	r11
	add	r13,rax
	mov	rax,QWORD[80+rsp]
	adc	r14,rdx
	mul	rbp
	add	rax,r13
	adc	rdx,r14
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rax,rcx
	mov	rcx,QWORD[((-104))+rsp]
	adc	rdx,rbx
	mov	rdi,rax
	shrd	rax,rdx,51
	and	rdi,r15
	lea	rdx,[rax*8+rax]
	lea	rax,[rdx*2+rax]
	add	rax,QWORD[((-120))+rsp]
	mov	rbp,rax
	shr	rax,51
	add	r12,rax
	lea	rax,[rdi*8+rdi]
	and	rbp,r15
	mov	r9,r12
	shr	r12,51
	lea	r10,[rcx*1+r12]
	lea	r8,[rax*2+rdi]
	and	r9,r15
	lea	rax,[r10*8+r10]
	lea	r14,[rax*2+r10]
	lea	rax,[rsi*8+rsi]
	lea	r13,[rax*2+rsi]
	mov	rax,QWORD[((-56))+rsp]
	mul	r8
	mov	rcx,rax
	mov	rax,QWORD[168+rsp]
	mov	rbx,rdx
	mul	r13
	add	rcx,rax
	mov	rax,QWORD[72+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	lea	rax,[r9*8+r9]
	adc	rbx,rdx
	lea	rax,[rax*2+r9]
	mul	QWORD[((-32))+rsp]
	add	rcx,rax
	mov	rax,QWORD[184+rsp]
	adc	rbx,rdx
	mul	r14
	add	rcx,rax
	mov	rax,rcx
	adc	rbx,rdx
	mov	r11,rcx
	and	rax,r15
	mov	r12,rbx
	mov	QWORD[((-120))+rsp],rax
	mov	rax,QWORD[168+rsp]
	mul	r8
	mov	rcx,rax
	mov	rax,QWORD[184+rsp]
	mov	rbx,rdx
	mul	r13
	add	rcx,rax
	mov	rax,QWORD[((-56))+rsp]
	adc	rbx,rdx
	mul	rbp
	add	rcx,rax
	mov	rax,QWORD[72+rsp]
	adc	rbx,rdx
	mul	r9
	add	rcx,rax
	mov	rax,r14
	adc	rbx,rdx
	mul	QWORD[((-32))+rsp]
	add	rax,rcx
	mov	rcx,r11
	adc	rdx,rbx
	mov	rbx,r12
	shrd	rcx,r12,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,QWORD[184+rsp]
	adc	rbx,rdx
	mov	r14,rcx
	and	r14,r15
	mul	r8
	mov	r11,rax
	mov	r12,rdx
	mov	rax,r13
	mul	QWORD[((-32))+rsp]
	add	r11,rax
	mov	rax,QWORD[168+rsp]
	adc	r12,rdx
	mul	rbp
	add	r11,rax
	mov	rax,QWORD[((-56))+rsp]
	adc	r12,rdx
	mul	r9
	add	r11,rax
	mov	rax,QWORD[72+rsp]
	mov	QWORD[((-96))+rsp],0
	adc	r12,rdx
	mov	QWORD[((-112))+rsp],0
	mul	r10
	add	rax,r11
	adc	rdx,r12
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,QWORD[72+rsp]
	adc	rbx,rdx
	mov	r13,rcx
	and	r13,r15
	mul	rsi
	mov	r11,rax
	mov	rax,r8
	mov	r8,QWORD[((-32))+rsp]
	mov	r12,rdx
	mul	r8
	add	r11,rax
	mov	rax,QWORD[184+rsp]
	adc	r12,rdx
	mul	rbp
	add	r11,rax
	mov	rax,QWORD[168+rsp]
	adc	r12,rdx
	mul	r9
	add	r11,rax
	mov	rax,QWORD[((-56))+rsp]
	adc	r12,rdx
	mul	r10
	add	rax,r11
	adc	rdx,r12
	shrd	rcx,rbx,51
	shr	rbx,51
	add	rcx,rax
	mov	rax,QWORD[72+rsp]
	adc	rbx,rdx
	mul	rdi
	mov	r11,rax
	mov	rax,QWORD[((-56))+rsp]
	mov	r12,rdx
	mul	rsi
	mov	rsi,rax
	mov	rdi,rdx
	mov	rax,r8
	add	rsi,r11
	adc	rdi,r12
	mul	rbp
	add	rsi,rax
	mov	rax,QWORD[184+rsp]
	adc	rdi,rdx
	mul	r9
	add	rsi,rax
	mov	rax,QWORD[168+rsp]
	adc	rdi,rdx
	mul	r10
	add	rsi,rax
	mov	rax,rcx
	adc	rdi,rdx
	mov	rdx,rbx
	shrd	rax,rbx,51
	shr	rdx,51
	add	rax,rsi
	adc	rdx,rdi
	mov	rsi,rax
	mov	QWORD[((-104))+rsp],rax
	shrd	rsi,rdx,51
	mov	rax,rcx
	xor	r10d,r10d
	lea	rdx,[rsi*8+rsi]
	and	rax,r15
	mov	r9,rax
	mov	rax,QWORD[((-104))+rsp]
	lea	rbp,[rdx*2+rsi]
	add	rbp,QWORD[((-120))+rsp]
	xor	edx,edx
	mov	rbx,rdx
	shr	rbx,51
	mov	rdi,rbp
	shr	rdi,51
	add	rdi,r14
	mov	r8,rdi
	shr	r8,51
	add	r8,r13
	mov	rcx,r8
	shrd	rcx,rdx,51
	add	r9,rcx
	adc	r10,rbx
	and	rax,r15
	xor	r12d,r12d
	mov	r11,rax
	mov	rax,r9
	mov	rdx,r10
	shrd	rax,r10,51
	shr	rdx,51
	add	r11,rax
	mov	eax,19
	adc	r12,rdx
	mov	rcx,r11
	and	rbp,r15
	shrd	rcx,r12,51
	mov	rbx,r12
	mul	rcx
	shr	rbx,51
	imul	rsi,rbx,19
	mov	rcx,rax
	mov	rbx,rdx
	xor	edx,edx
	add	rbx,rsi
	add	rcx,rbp
	adc	rbx,rdx
	mov	rsi,rcx
	and	rdi,r15
	shrd	rsi,rbx,51
	mov	rax,rdi
	mov	rdi,rbx
	xor	edx,edx
	shr	rdi,51
	add	rsi,rax
	mov	rbx,rcx
	adc	rdi,rdx
	and	r8,r15
	xor	edx,edx
	mov	rbp,rdi
	mov	rdi,rsi
	mov	QWORD[((-120))+rsp],rsi
	shrd	rdi,rbp,51
	shr	rbp,51
	mov	rsi,r9
	add	rdi,r8
	adc	rbp,rdx
	mov	r8,rdi
	and	rsi,r15
	shrd	r8,rbp,51
	mov	r9,rbp
	xor	edx,edx
	shr	r9,51
	add	r8,rsi
	mov	rsi,r11
	adc	r9,rdx
	and	rsi,r15
	xor	edx,edx
	mov	r10,r9
	mov	r9,r8
	mov	QWORD[((-104))+rsp],r8
	shrd	r9,r10,51
	shr	r10,51
	add	r9,rsi
	mov	esi,19
	mov	r8,r9
	adc	r10,rdx
	and	rbx,r15
	mov	rax,r8
	mov	rdx,r10
	mov	r11,rbx
	shrd	rax,r10,51
	shr	rdx,51
	xor	r12d,r12d
	mov	rbx,rdi
	imul	r10,rdx,19
	mul	rsi
	add	rdx,r10
	add	r11,19
	adc	r12,0
	add	r11,rax
	mov	rax,QWORD[((-120))+rsp]
	adc	r12,rdx
	xor	r14d,r14d
	mov	rdx,r12
	and	rax,r15
	shr	rdx,51
	mov	r13,rax
	mov	rax,r11
	shrd	rax,r12,51
	add	r13,rax
	mov	rax,QWORD[((-104))+rsp]
	adc	r14,rdx
	mov	rsi,r13
	and	rbx,r15
	shrd	rsi,r14,51
	mov	rdi,r14
	xor	edx,edx
	shr	rdi,51
	add	rsi,rbx
	adc	rdi,rdx
	and	rax,r15
	xor	ebx,ebx
	mov	rcx,rax
	mov	rax,rsi
	mov	rdx,rdi
	shrd	rax,rdi,51
	shr	rdx,51
	mov	rdi,r8
	mov	QWORD[((-120))+rsp],rsi
	add	rcx,rax
	mov	esi,19
	adc	rbx,rdx
	mov	r8,rcx
	and	rdi,r15
	shrd	r8,rbx,51
	mov	r9,rbx
	xor	edx,edx
	mov	rbx,rcx
	shr	r9,51
	add	r8,rdi
	adc	r9,rdx
	mov	rax,r8
	xor	r12d,r12d
	shrd	rax,r9,51
	mov	rdx,r9
	mov	QWORD[((-80))+rsp],r9
	xor	r10d,r10d
	shr	rdx,51
	mov	QWORD[((-88))+rsp],r8
	imul	rdi,rdx,19
	mul	rsi
	add	rdx,rdi
	mov	rdi,r11
	mov		r11,2251799813685229
	and	rdi,r15
	mov	r9,rdi
	mov	rdi,r13
	add	r9,r11
	adc	r10,r12
	add	rax,r9
	mov		r9,2251799813685247
	adc	rdx,r10
	and	rdi,r15
	xor	r10d,r10d
	mov	r11,rdi
	xor	r12d,r12d
	mov	r13,rax
	add	r11,r9
	mov	rdi,QWORD[((-120))+rsp]
	mov	r14,rdx
	adc	r12,r10
	shr	r14,51
	shrd	r13,rdx,51
	add	r13,r11
	adc	r14,r12
	and	rdi,r15
	xor	r12d,r12d
	mov	rsi,rdi
	mov	r11,r13
	mov	rdi,r12
	add	rsi,r9
	mov	r12,r14
	adc	rdi,r10
	shr	r12,51
	shrd	r11,r14,51
	add	r11,rsi
	adc	r12,rdi
	and	rbx,r15
	xor	r14d,r14d
	mov	rdi,r13
	mov	rcx,rbx
	mov	r13,r11
	and	rdi,r15
	mov	rbx,r14
	add	rcx,r9
	adc	rbx,r10
	mov	r14,r12
	mov	QWORD[((-104))+rsp],rdi
	shrd	r13,r12,51
	mov	rsi,QWORD[((-104))+rsp]
	shr	r14,51
	add	r13,rcx
	adc	r14,rbx
	mov	rbx,r11
	mov	rdi,r13
	and	rbx,r15
	mov	rdx,rsi
	and	rax,r15
	mov	r13,rbx
	mov	rbx,rdi
	sal	rdx,51
	and	rbx,r15
	or	rax,rdx
	mov	r11,rdi
	mov	QWORD[((-120))+rsp],rbx
	mov	rbx,QWORD[352+rsp]
	mov	rdx,rax
	shr	rdx,8
	mov	rdi,QWORD[((-96))+rsp]
	mov	rbp,r14
	mov	rcx,r13
	xor	r14d,r14d
	mov	BYTE[1+rbx],dl
	mov	rdx,rax
	mov	BYTE[rbx],al
	shr	rdx,16
	mov	BYTE[2+rbx],dl
	mov	rdx,rax
	shr	rdx,24
	mov	BYTE[3+rbx],dl
	mov	rdx,rax
	shr	rdx,32
	mov	BYTE[4+rbx],dl
	mov	rdx,rax
	mov	r12,QWORD[((-112))+rsp]
	shr	rdx,40
	mov	BYTE[5+rbx],dl
	mov	rdx,rax
	shr	rax,56
	mov	BYTE[7+rbx],al
	mov	rax,r13
	shr	rdx,48
	shrd	rsi,rdi,13
	sal	rax,38
	mov	rdi,rbx
	mov	BYTE[6+rbx],dl
	or	rsi,rax
	mov	r13,r11
	mov	r11,QWORD[((-120))+rsp]
	mov	rax,rsi
	mov	BYTE[8+rbx],sil
	shr	rax,8
	mov	BYTE[9+rbx],al
	mov	rax,rsi
	shr	rax,16
	mov	BYTE[10+rbx],al
	mov	rax,rsi
	shr	rax,24
	mov	BYTE[11+rbx],al
	mov	rax,rsi
	shr	rax,32
	mov	BYTE[12+rbx],al
	mov	rax,rsi
	shr	rax,40
	mov	BYTE[13+rbx],al
	mov	rax,rsi
	shr	rsi,56
	shr	rax,48
	mov	BYTE[15+rbx],sil
	mov	BYTE[14+rbx],al
	mov	rax,QWORD[((-120))+rsp]
	mov	rbx,rdi
	shrd	rcx,r14,26
	sal	rax,25
	or	rcx,rax
	mov	rax,rcx
	mov	BYTE[16+rdi],cl
	shr	rax,8
	mov	BYTE[17+rdi],al
	mov	rax,rcx
	shr	rax,16
	mov	BYTE[18+rdi],al
	mov	rax,rcx
	shr	rax,24
	mov	BYTE[19+rdi],al
	mov	rax,rcx
	shr	rax,32
	mov	BYTE[20+rdi],al
	mov	rax,rcx
	shr	rax,40
	mov	BYTE[21+rdi],al
	mov	rax,rcx
	shr	rax,48
	shr	rcx,56
	mov	BYTE[22+rdi],al
	mov	BYTE[23+rdi],cl
	mov	rdi,QWORD[((-88))+rsp]
	and	rdi,r15
	mov	rax,rdi
	add	rax,r9
	shrd	r13,rbp,51
	add	rax,r13
	and	rax,r15
	shrd	r11,r12,39
	sal	rax,12
	or	rax,r11
	mov	rdx,rax
	mov	BYTE[24+rbx],al
	shr	rdx,8
	mov	BYTE[25+rbx],dl
	mov	rdx,rax
	shr	rdx,16
	mov	BYTE[26+rbx],dl
	mov	rdx,rax
	shr	rdx,24
	mov	BYTE[27+rbx],dl
	mov	rdx,rax
	shr	rdx,32
	mov	BYTE[28+rbx],dl
	mov	rdx,rax
	shr	rdx,40
	mov	BYTE[29+rbx],dl
	mov	rdx,rax
	shr	rax,56
	shr	rdx,48
	mov	BYTE[31+rbx],al
	xor	eax,eax
	mov	BYTE[30+rbx],dl
	add	rsp,784


	pop rdi
	pop rsi
	pop	rbx
	pop	rbp
	pop	r12
	pop	r13
	pop	r14
	pop	r15
	ret

$L$FE13:


